修改消息bug

This commit is contained in:
曹佳豪 2025-06-20 09:31:12 +08:00
parent 360caa64f6
commit c014f65f13
14 changed files with 184 additions and 97 deletions

View File

@ -136,6 +136,7 @@ tenant:
- sys_role_menu
- sys_user_post
- sys_user_role
- sys_message
- sys_client
- sys_oss_config
- ums_member
@ -145,6 +146,7 @@ tenant:
- ums_cart
- ums_account
- ums_account_change_record
- sys_message_template
- ums_fans
- ums_block
- oms_aftersale

View File

@ -31,11 +31,11 @@ public class BaseEntity implements Serializable {
@TableField(exist = false)
private String searchValue;
// /**
// * 创建部门
// */
// @TableField(fill = FieldFill.INSERT)
// private Long createDept;
/**
* 创建部门
*/
@TableField(fill = FieldFill.INSERT)
private Long createDept;
/**
* 创建者

View File

@ -45,7 +45,7 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
// 填充创建人更新人和创建部门信息
baseEntity.setCreateBy(userId);
baseEntity.setUpdateBy(userId);
// baseEntity.setCreateDept(ObjectUtils.notNull(baseEntity.getCreateDept(), loginUser.getDeptId()));
baseEntity.setCreateDept(ObjectUtils.notNull(baseEntity.getCreateDept(), loginUser.getDeptId()));
}
}
} else {

View File

@ -1,8 +1,8 @@
package org.dromara.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
@ -59,8 +59,9 @@ public class SysMessageController extends BaseController {
* 查询消息列表
*/
@SaCheckPermission("system:message:list")
@Tag(name = "查询消息列表")
@PostMapping("/list")
public R<Page<SysMessageVo>> list(@RequestBody SysMessageBo bo, @RequestBody Page page) {
public R<Page<SysMessageVo>> list(@RequestBody SysMessageBo bo, @RequestBody Page<SysMessage> page) {
Page<SysMessage> messagePage = messageService.page(page, bo.toWrapper());
Page<SysMessageVo> voPage = new Page<>(messagePage.getCurrent(), messagePage.getSize(), messagePage.getTotal());
voPage.setRecords(MapstructUtils.convert(messagePage.getRecords(), SysMessageVo.class));
@ -149,18 +150,22 @@ public class SysMessageController extends BaseController {
* 获取未读消息列表
*/
@SaCheckPermission("system:message:list")
@GetMapping("/unread")
public TableDataInfo<SysMessageVo> unreadList(PageQuery pageQuery) {
return messageService.selectPageUnreadMessages(getUserId(), pageQuery);
@Tag(name = "查询未读消息列表")
@PostMapping("/unread")
public R<Page<SysMessageVo>> unreadList(@RequestBody Page<SysMessage> page) {
Page<SysMessageVo> unreadPage = messageService.selectUnreadMessagesPage(getUserId(), page);
return R.ok(unreadPage);
}
/**
* 获取已读消息列表
*/
@SaCheckPermission("system:message:list")
@GetMapping("/read")
public TableDataInfo<SysMessageVo> readList(PageQuery pageQuery) {
return messageService.selectPageReadMessages(getUserId(), pageQuery);
@Tag(name = "查询已读消息列表")
@PostMapping("/read")
public R<Page<SysMessageVo>> readList(@RequestBody Page<SysMessage> page) {
Page<SysMessageVo> readPage = messageService.selectReadMessagesPage(getUserId(), page);
return R.ok(readPage);
}
/**

View File

@ -1,18 +1,20 @@
package org.dromara.system.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.SysMessageTemplate;
import org.dromara.system.domain.bo.SysMessageTemplateBo;
import org.dromara.system.domain.vo.SysMessageTemplateVo;
import org.dromara.system.service.ISysMessageTemplateService;
@ -38,9 +40,13 @@ public class SysMessageTemplateController extends BaseController {
* 查询消息模板列表
*/
@SaCheckPermission("system:message:template:list")
@GetMapping("/list")
public TableDataInfo<SysMessageTemplateVo> list(SysMessageTemplateBo bo, PageQuery pageQuery) {
return templateService.selectTemplatePage(bo, pageQuery);
@Tag(name = "查询消息模板列表")
@PostMapping("/list")
public R<Page<SysMessageTemplateVo>> list(@RequestBody SysMessageTemplateBo bo, @RequestBody Page<SysMessageTemplate> page) {
Page<SysMessageTemplate> templatePage = templateService.page(page, bo.toWrapper());
Page<SysMessageTemplateVo> voPage = new Page<>(templatePage.getCurrent(), templatePage.getSize(), templatePage.getTotal());
voPage.setRecords(MapstructUtils.convert(templatePage.getRecords(), SysMessageTemplateVo.class));
return R.ok(voPage);
}
/**
@ -51,7 +57,8 @@ public class SysMessageTemplateController extends BaseController {
@SaCheckPermission("system:message:template:query")
@GetMapping("/{id}")
public R<SysMessageTemplateVo> getInfo(@NotNull(message = "消息模板ID不能为空") @PathVariable Long id) {
return R.ok(templateService.selectTemplateById(id));
SysMessageTemplate template = templateService.getById(id);
return R.ok(MapstructUtils.convert(template, SysMessageTemplateVo.class));
}
/**
@ -62,7 +69,7 @@ public class SysMessageTemplateController extends BaseController {
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysMessageTemplateBo bo) {
return toAjax(templateService.insertTemplate(bo));
return toAjax(templateService.save(bo.toEntity()));
}
/**
@ -73,7 +80,7 @@ public class SysMessageTemplateController extends BaseController {
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysMessageTemplateBo bo) {
return toAjax(templateService.updateTemplate(bo));
return toAjax(templateService.updateById(bo.toEntity()));
}
/**
@ -85,6 +92,6 @@ public class SysMessageTemplateController extends BaseController {
@Log(title = "消息模板管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "消息模板ID不能为空") @PathVariable Long[] ids) {
return toAjax(templateService.deleteTemplateByIds(ids));
return toAjax(templateService.removeByIds(List.of(ids)));
}
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.tenant.core.TenantEntity;
@ -18,7 +19,7 @@ import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_message")
public class SysMessage extends BaseEntity {
public class SysMessage extends BaseAudit {
private static final long serialVersionUID = 1L;

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.tenant.core.TenantEntity;
@ -15,7 +16,7 @@ import org.dromara.common.tenant.core.TenantEntity;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_message_template")
public class SysMessageTemplate extends BaseEntity {
public class SysMessageTemplate extends BaseAudit {
private static final long serialVersionUID = 1L;
@ -26,9 +27,10 @@ public class SysMessageTemplate extends BaseEntity {
private Long id;
/**
* 模板类型1通知 2公告 3消息
* 模板类型0通知 1公告
*/
private String templateType;
private String title;
/**
* 模板编码
@ -40,23 +42,24 @@ public class SysMessageTemplate extends BaseEntity {
*/
private String templateName;
/**
* 模板内容
*/
private String templateContent;
/**
* 模板参数
*/
private String templateParams;
// /**
// * 模板参数
// */
// private String templateParams;
/**
* 状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
//
// /**
// * 备注
// */
// private String remark;
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.tenant.core.TenantEntity;
@ -17,7 +18,7 @@ import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_message_user")
public class SysMessageUser extends BaseEntity {
public class SysMessageUser extends BaseAudit {
private static final long serialVersionUID = 1L;

View File

@ -6,12 +6,14 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.system.domain.SysMessage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import io.github.linpeilie.annotations.AutoMapper;
import java.util.Date;
import java.util.List;
@ -24,7 +26,8 @@ import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@ExcelIgnoreUnannotated
public class SysMessageBo extends BaseEntity {
@AutoMapper(target = SysMessage.class, reverseConvertGenerate = false)
public class SysMessageBo extends BaseAudit {
/** 主键ID */
@ExcelProperty(value = "消息ID")
@ -58,22 +61,42 @@ public class SysMessageBo extends BaseEntity {
@ExcelProperty(value = "定时发送时间")
private Date scheduledTime;
// /** 状态0正常 1停用 */
// @ExcelProperty(value = "状态")
// private String status;
/** 发送范围all:全部用户, userType:按用户类型, userIds:指定用户) */
@NotBlank(message = "发送范围不能为空", groups = { AddGroup.class })
private String sendScope;
/** 接收用户ID列表 */
private List<Long> userIds;
// /** 用户类型1普通用户 2商家 3达人 4代理 */
// private String userType;
/** 是否发送给所有用户 */
private Boolean sendToAll;
/** 扩展数据JSON格式 */
private String extraData;
/** 状态0正常 1停用 */
private String status;
/** 备注 */
private String remark;
/**
* 转换为查询条件
*/
public LambdaQueryWrapper<SysMessage> toWrapper() {
LambdaQueryWrapper<SysMessage> lqw = new LambdaQueryWrapper<>();
lqw.like(StringUtils.isNotBlank(this.getTitle()), SysMessage::getTitle, this.getTitle())
.eq(StringUtils.isNotBlank(this.getMsgType()), SysMessage::getMsgType, this.getMsgType())
.eq(StringUtils.isNotBlank(this.getSubType()), SysMessage::getSubType, this.getSubType())
.eq(this.getSenderId() != null, SysMessage::getSenderId, this.getSenderId())
// .eq(StringUtils.isNotBlank(this.getStatus()), SysMessage::getStatus, this.getStatus())
.orderByDesc(SysMessage::getCreateTime);
return lqw;
}
/**
* 转换为实体对象
*/
public SysMessage toEntity() {
SysMessage entity = new SysMessage();
entity.setId(this.getId());
@ -83,22 +106,13 @@ public class SysMessageBo extends BaseEntity {
entity.setSubType(this.getSubType());
entity.setSenderId(this.getSenderId());
entity.setScheduledTime(this.getScheduledTime());
// entity.setExtraData(this.getExtraData());
// entity.setStatus(this.getStatus());
// entity.setRemark(this.getRemark());
entity.setCreateBy(this.getCreateBy());
entity.setCreateTime(this.getCreateTime());
entity.setUpdateBy(this.getUpdateBy());
entity.setUpdateTime(this.getUpdateTime());
return entity;
}
/**
* 转换为查询条件
*/
public LambdaQueryWrapper<SysMessage> toWrapper() {
LambdaQueryWrapper<SysMessage> lqw = new LambdaQueryWrapper<>();
lqw.like(StringUtils.isNotBlank(this.getTitle()), SysMessage::getTitle, this.getTitle())
.eq(StringUtils.isNotBlank(this.getMsgType()), SysMessage::getMsgType, this.getMsgType())
.orderByDesc(SysMessage::getCreateTime);
return lqw;
}
}

View File

@ -1,7 +1,12 @@
package org.dromara.system.domain.bo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.model.BaseAudit;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.mybatis.core.domain.BaseEntity;
@ -12,13 +17,15 @@ import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
/**
* 消息模板业务对象 sys_message_template
* 消息模板业务对象
*
* @author ruoyi
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SysMessageTemplateBo extends BaseEntity {
@AutoMapper(target = SysMessageTemplate.class, reverseConvertGenerate = false)
public class SysMessageTemplateBo extends BaseAudit {
/**
* 模板ID
@ -27,24 +34,25 @@ public class SysMessageTemplateBo extends BaseEntity {
private Long id;
/**
* 模板类型1通知 2公告 3消息
* 模板名称
*/
@NotBlank(message = "模板类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String templateType;
@NotBlank(message = "模板名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(max = 100, message = "模板名称长度不能超过{max}个字符")
private String templateName;
/**
* 模板编码
*/
@NotBlank(message = "模板编码不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 64, message = "模板编码长度不能超过64个字符")
@Size(max = 50, message = "模板编码长度不能超过{max}个字符")
private String templateCode;
/**
* 模板名称
* 模板类型SMS=短信 MAIL=邮件 WECHAT=微信 SYSTEM=系统消息
*/
@NotBlank(message = "模板名称不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(min = 0, max = 100, message = "模板名称长度不能超过100个字符")
private String templateName;
@NotBlank(message = "模板类型不能为空", groups = { AddGroup.class, EditGroup.class })
@Size(max = 20, message = "模板类型长度不能超过{max}个字符")
private String templateType;
/**
* 模板内容
@ -53,38 +61,44 @@ public class SysMessageTemplateBo extends BaseEntity {
private String templateContent;
/**
* 模板参数
* 状态0正常 1停用
*/
private String templateParams;
private String status;
/**
* 标题
*/
private String title;
// /**
// * 状态0正常 1停用
// * 备注
// */
// @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class })
// private String status;
// private String remark;
/**
* 备注
* 将当前对象转换为查询条件
*/
private String remark;
public LambdaQueryWrapper<SysMessageTemplate> toWrapper() {
LambdaQueryWrapper<SysMessageTemplate> lqw = new LambdaQueryWrapper<>();
lqw.like(StringUtils.isNotBlank(templateName), SysMessageTemplate::getTemplateName, templateName)
.like(StringUtils.isNotBlank(templateCode), SysMessageTemplate::getTemplateCode, templateCode)
.eq(StringUtils.isNotBlank(templateType), SysMessageTemplate::getTemplateType, templateType)
.eq(StringUtils.isNotBlank(status), SysMessageTemplate::getStatus, status)
.orderByDesc(SysMessageTemplate::getCreateTime);
return lqw;
}
/**
* 转换为实体对象
*/
public SysMessageTemplate toEntity() {
SysMessageTemplate entity = new SysMessageTemplate();
entity.setId(this.getId());
entity.setTemplateType(this.getTemplateType());
entity.setTemplateCode(this.getTemplateCode());
entity.setTemplateName(this.getTemplateName());
entity.setTemplateContent(this.getTemplateContent());
entity.setTemplateParams(this.getTemplateParams());
// entity.setStatus(this.getStatus());
entity.setRemark(this.getRemark());
entity.setCreateBy(this.getCreateBy());
entity.setCreateTime(this.getCreateTime());
entity.setUpdateBy(this.getUpdateBy());
entity.setUpdateTime(this.getUpdateTime());
entity.setId(id);
entity.setTemplateName(templateName);
entity.setTemplateCode(templateCode);
entity.setTemplateType(templateType);
entity.setTemplateContent(templateContent);
entity.setStatus(status);
entity.setTitle(title);
// entity.setRemark(remark);
return entity;
}
}

View File

@ -1,8 +1,11 @@
package org.dromara.system.domain.vo;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity;
import org.dromara.system.domain.SysMessage;
import org.dromara.system.domain.SysMessageTemplate;
import java.io.Serializable;
@ -12,7 +15,7 @@ import java.io.Serializable;
* @author ruoyi
*/
@Data
//@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = SysMessageTemplate.class)
public class SysMessageTemplateVo implements Serializable {
private static final long serialVersionUID = 1L;
@ -42,18 +45,18 @@ public class SysMessageTemplateVo implements Serializable {
*/
private String templateContent;
// /**
// * 模板参数
// */
// private String templateParams;
/**
* 模板参数
* 状态0正常 1停用
*/
private String templateParams;
private String status;
// /**
// * 状态0正常 1停用
// * 备注
// */
// private String status;
/**
* 备注
*/
private String remark;
// private String remark;
}

View File

@ -1,6 +1,7 @@
package org.dromara.system.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
@ -22,6 +23,16 @@ public interface ISysMessageService extends IService<SysMessage> {
*/
TableDataInfo<SysMessageVo> selectPageMessageList(SysMessageBo bo, PageQuery pageQuery);
/**
* 查询未读消息分页Page方式
*/
Page<SysMessageVo> selectUnreadMessagesPage(Long userId, Page<SysMessage> page);
/**
* 查询已读消息分页Page方式
*/
Page<SysMessageVo> selectReadMessagesPage(Long userId, Page<SysMessage> page);
/**
* 发送消息给指定用户
*

View File

@ -49,6 +49,32 @@ public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMess
return TableDataInfo.build(voPage);
}
@Override
public Page<SysMessageVo> selectUnreadMessagesPage(Long userId, Page<SysMessage> page) {
LambdaQueryWrapper<SysMessage> lqw = new LambdaQueryWrapper<>();
lqw.inSql(SysMessage::getId,
"SELECT message_id FROM sys_message_user WHERE user_id = " + userId + " AND is_read = 0")
.orderByDesc(SysMessage::getCreateTime);
Page<SysMessage> messagePage = messageMapper.selectPage(page, lqw);
Page<SysMessageVo> voPage = new Page<>(messagePage.getCurrent(), messagePage.getSize(), messagePage.getTotal());
voPage.setRecords(MapstructUtils.convert(messagePage.getRecords(), SysMessageVo.class));
return voPage;
}
@Override
public Page<SysMessageVo> selectReadMessagesPage(Long userId, Page<SysMessage> page) {
LambdaQueryWrapper<SysMessage> lqw = new LambdaQueryWrapper<>();
lqw.inSql(SysMessage::getId,
"SELECT message_id FROM sys_message_user WHERE user_id = " + userId + " AND is_read = 1")
.orderByDesc(SysMessage::getCreateTime);
Page<SysMessage> messagePage = messageMapper.selectPage(page, lqw);
Page<SysMessageVo> voPage = new Page<>(messagePage.getCurrent(), messagePage.getSize(), messagePage.getTotal());
voPage.setRecords(MapstructUtils.convert(messagePage.getRecords(), SysMessageVo.class));
return voPage;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int sendMessageToUser(SysMessageBo message, Long userId) {

View File

@ -220,7 +220,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
.eq(FlowCategory::getTenantId, DEFAULT_TENANT_ID).eq(FlowCategory::getCategoryId, FlowConstant.FLOW_CATEGORY_ID));
flowCategory.setCategoryId(null);
flowCategory.setTenantId(tenantId);
// flowCategory.setCreateDept(null);
flowCategory.setCreateDept(null);
flowCategory.setCreateBy(null);
flowCategory.setCreateTime(null);
flowCategory.setUpdateBy(null);