Merge remote-tracking branch 'origin/dev2' into dev2

This commit is contained in:
Lqc 2025-09-18 08:53:42 +08:00
commit 06063b975a
5 changed files with 218 additions and 6 deletions

View File

@ -114,7 +114,7 @@ public class AiolCourseSectionController extends JeecgController<AiolCourseSecti
aiolEntityLinkMapper.insert(entityLink);
}
return Result.OK("添加成功!");
return Result.OK(sectionDTO.getId());
} catch (Exception e) {
log.error("添加课程章节失败: {}", e.getMessage(), e);
return Result.error("添加课程章节失败: " + e.getMessage());

View File

@ -0,0 +1,116 @@
package org.jeecg.modules.aiol.controller;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.constant.enums.MessageTypeEnum;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.jeecg.common.api.vo.Result;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.vo.LoginUser;
import org.springframework.web.bind.annotation.RequestParam;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.jeecg.modules.system.model.AnnouncementSendModel;
import org.jeecg.modules.system.service.ISysAnnouncementSendService;
import org.apache.commons.lang3.StringUtils;
@RestController
@RequestMapping("/aiol/message")
public class AiolMessageController {
@Autowired
private ISysBaseAPI sysBaseApi;
@Autowired
private ISysAnnouncementSendService sysAnnouncementSendService;
@GetMapping("/test")
public void test() {
// //推送消息
// MessageDTO messageDTO = new MessageDTO();
// messageDTO.setToAll(false);
// messageDTO.setToUser("202121200873");
// messageDTO.setTitle("评论和@");
// messageDTO.setCategory("3");
// //推送消息类型
// messageDTO.setType(MessageTypeEnum.XT.getType());
// messageDTO.setIsMarkdown(false);
// messageDTO.setFromUser("202121200874");
// messageDTO.setContent("{\"sender\":{\"id\":\"1966804797404344321\",\"username\":\"小明\"},\"comment\":{\"id\":456,\"content\":\"老师讲得真棒![user:789:李四] 快来看这个课程!\"},\"entity\":{\"type\":\"course\",\"id\":\"1954463468539371522\",\"title\":\"python语言基础与应用\"},\"actionTime\":\"2025-09-16T15:30:00Z\"}");
// sysBaseApi.sendTemplateMessage(messageDTO);
//推送消息
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToAll(false);
messageDTO.setToUser("202121200873");
messageDTO.setTitle("赞和收藏");
messageDTO.setCategory("4");
//推送消息类型
messageDTO.setType(MessageTypeEnum.XT.getType());
messageDTO.setIsMarkdown(false);
messageDTO.setFromUser("202121200874");
messageDTO.setContent("{\"sender\":{\"id\":\"202121200874\",\"username\":\"202121200874\"},\"entity\":{\"type\":\"course\",\"id\":\"1954463468539371522\",\"title\":\"python语言基础与应用\"},\"action\":\"like\",\"actionTime\":\"2025-09-16T15:35:00Z\"}");
sysBaseApi.sendTemplateMessage(messageDTO);
}
@GetMapping("/comments_at")
public Result<IPage<AnnouncementSendModel>> queryCommentsAndAt(
AnnouncementSendModel model,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
try {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = sysUser.getId();
model.setUserId(userId);
model.setPageNo((pageNo - 1) * pageSize);
model.setPageSize(pageSize);
// 处理时间范围与SysAnnouncementSendController一致
if (StringUtils.isNotEmpty(model.getSendTimeBegin())) {
model.setSendTimeBegin(model.getSendTimeBegin() + " 00:00:00");
}
if (StringUtils.isNotEmpty(model.getSendTimeEnd())) {
model.setSendTimeEnd(model.getSendTimeEnd() + " 23:59:59");
}
// 评论和@ 消息类别 = 3
model.setMsgCategory("3");
Page<AnnouncementSendModel> page = new Page<>(pageNo, pageSize);
IPage<AnnouncementSendModel> pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model);
return Result.OK(pageList);
} catch (Exception e) {
return Result.error("查询评论/@消息失败: " + e.getMessage());
}
}
@GetMapping("/likes")
public Result<IPage<AnnouncementSendModel>> queryLikes(
AnnouncementSendModel model,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
try {
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String userId = sysUser.getId();
model.setUserId(userId);
model.setPageNo((pageNo - 1) * pageSize);
model.setPageSize(pageSize);
if (StringUtils.isNotEmpty(model.getSendTimeBegin())) {
model.setSendTimeBegin(model.getSendTimeBegin() + " 00:00:00");
}
if (StringUtils.isNotEmpty(model.getSendTimeEnd())) {
model.setSendTimeEnd(model.getSendTimeEnd() + " 23:59:59");
}
// 点赞 消息类别 = 4
model.setMsgCategory("4");
Page<AnnouncementSendModel> page = new Page<>(pageNo, pageSize);
IPage<AnnouncementSendModel> pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model);
return Result.OK(pageList);
} catch (Exception e) {
return Result.error("查询点赞消息失败: " + e.getMessage());
}
}
}

View File

@ -22,7 +22,7 @@ import lombok.experimental.Accessors;
/**
* @Description: 课程
* @Author: jeecg-boot
* @Date: 2025-09-13
* @Date: 2025-09-17
* @Version: V1.0
*/
@Data
@ -141,6 +141,14 @@ public class AiolCourse implements Serializable {
@Excel(name = "上架状态", width = 15)
@Schema(description = "上架状态")
private java.lang.Integer publishStatus;
/**学期*/
@Excel(name = "学期", width = 15)
@Schema(description = "学期")
private java.lang.String semester;
/**是否允许下载*/
@Excel(name = "是否允许下载", width = 15)
@Schema(description = "是否允许下载")
private java.lang.Integer allowDownload;
/**创建人*/
@Schema(description = "创建人")
private java.lang.String createBy;

View File

@ -76,7 +76,7 @@ public class SystemSendMsgHandle implements ISendMsgHandle {
String[] arr = messageDTO.getToUser().split(",");
for(String username: arr){
//update-begin---author:wangshuai---date:2025-06-26---for:QQYUN-12162OA项目改造系统重消息拆分目前消息都在一起 需按分类进行拆分---
doSend(title, content, fromUser, username, data, messageDTO.getNoticeType());
doSend(title, content, fromUser, username, data, messageDTO.getNoticeType(), messageDTO.getCategory());
//update-end---author:wangshuai---date:2025-06-26---for:QQYUN-12162OA项目改造系统重消息拆分目前消息都在一起 需按分类进行拆分---
}
}
@ -145,4 +145,70 @@ public class SystemSendMsgHandle implements ISendMsgHandle {
}
}
}
// 扩展msgCategory
private void doSend(String title, String msgContent, String fromUser, String toUser, Map<String, Object> data, String noticeType, String msgCategory){
SysAnnouncement announcement = new SysAnnouncement();
if(data!=null){
//摘要信息
Object msgAbstract = data.get(CommonConstant.NOTICE_MSG_SUMMARY);
if(msgAbstract!=null){
announcement.setMsgAbstract(msgAbstract.toString());
}
// 任务节点ID
Object taskId = data.get(CommonConstant.NOTICE_MSG_BUS_ID);
if(taskId!=null){
announcement.setBusId(taskId.toString());
announcement.setBusType(Vue3MessageHrefEnum.BPM_TASK.getBusType());
noticeType = NoticeTypeEnum.NOTICE_TYPE_FLOW.getValue();
}
// 流程内消息节点 发消息会传一个busType
Object busType = data.get(CommonConstant.NOTICE_MSG_BUS_TYPE);
if(busType!=null){
announcement.setBusType(busType.toString());
noticeType = NoticeTypeEnum.NOTICE_TYPE_FLOW.getValue();
}
}
announcement.setTitile(title);
announcement.setMsgContent(msgContent);
announcement.setSender(fromUser);
announcement.setPriority(CommonConstant.PRIORITY_M);
announcement.setMsgType(CommonConstant.MSG_TYPE_UESR);
announcement.setSendStatus(CommonConstant.HAS_SEND);
announcement.setSendTime(new Date());
//系统消息
announcement.setMsgCategory(msgCategory);
announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0));
if(oConvertUtils.isEmpty(noticeType)){
noticeType = NoticeTypeEnum.NOTICE_TYPE_SYSTEM.getValue();
}
announcement.setNoticeType(noticeType);
announcement.setIzTop(CommonConstant.IZ_TOP_0);
sysAnnouncementMapper.insert(announcement);
// 2.插入用户通告阅读标记表记录
String userId = toUser;
String[] userIds = userId.split(",");
String anntId = announcement.getId();
for(int i=0;i<userIds.length;i++) {
if(oConvertUtils.isNotEmpty(userIds[i])) {
SysUser sysUser = userMapper.getUserByName(userIds[i]);
if(sysUser==null) {
continue;
}
SysAnnouncementSend announcementSend = new SysAnnouncementSend();
announcementSend.setAnntId(anntId);
announcementSend.setUserId(sysUser.getId());
announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
sysAnnouncementSendMapper.insert(announcementSend);
JSONObject obj = new JSONObject();
obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
obj.put(WebsocketConst.MSG_USER_ID, sysUser.getId());
obj.put(WebsocketConst.MSG_ID, announcement.getId());
obj.put(WebsocketConst.MSG_TXT, announcement.getTitile());
obj.put(CommonConstant.NOTICE_TYPE,noticeType);
webSocket.sendMessage(sysUser.getId(), obj.toJSONString());
}
}
}
}

View File

@ -102,7 +102,7 @@ export const columns: BasicColumn[] = [
dataIndex: 'question',
},
{
title: '是否ai伴学模式',
title: '是否ai伴学模式1',
align:"center",
dataIndex: 'izAi'
},
@ -126,6 +126,16 @@ export const columns: BasicColumn[] = [
align:"center",
dataIndex: 'publishStatus'
},
{
title: '学期',
align:"center",
dataIndex: 'semester'
},
{
title: '是否允许下载',
align:"center",
dataIndex: 'allowDownload'
},
];
//
export const searchFormSchema: FormSchema[] = [
@ -255,7 +265,7 @@ export const formSchema: FormSchema[] = [
component: 'JEditor',
},
{
label: '是否ai伴学模式',
label: '是否ai伴学模式1',
field: 'izAi',
component: 'InputNumber',
},
@ -278,6 +288,16 @@ export const formSchema: FormSchema[] = [
label: '上架状态',
field: 'publishStatus',
component: 'InputNumber',
},
{
label: '学期',
field: 'semester',
component: 'Input',
},
{
label: '是否允许下载',
field: 'allowDownload',
component: 'InputNumber',
},
// TODO ID
{
@ -309,11 +329,13 @@ export const superQuerySchema = {
maxEnroll: {title: '最大报名人数',order: 16,view: 'number', type: 'number',},
status: {title: '状态',order: 17,view: 'number', type: 'number',dictCode: 'course_status',},
question: {title: '常见问题',order: 18,view: 'umeditor', type: 'string',},
izAi: {title: '是否ai伴学模式',order: 19,view: 'number', type: 'number',},
izAi: {title: '是否ai伴学模式1',order: 19,view: 'number', type: 'number',},
pauseExit: {title: '离开页面是否暂停视频播放',order: 20,view: 'number', type: 'number',},
allowSpeed: {title: '是否允许倍速播放',order: 21,view: 'number', type: 'number',},
showSubtitle: {title: '是否显示字幕',order: 22,view: 'number', type: 'number',},
publishStatus: {title: '上架状态',order: 23,view: 'number', type: 'number',},
semester: {title: '学期',order: 24,view: 'text', type: 'string',},
allowDownload: {title: '是否允许下载',order: 25,view: 'number', type: 'number',},
};
/**