From 8b45b63bbea74add5c3ddb23753d1db62af13a18 Mon Sep 17 00:00:00 2001 From: GoCo Date: Wed, 17 Sep 2025 04:33:04 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AiolMessageController.java | 116 ++++++++++++++++++ .../handle/impl/SystemSendMsgHandle.java | 68 +++++++++- 2 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java new file mode 100644 index 00000000..c5ccb4a5 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolMessageController.java @@ -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> 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 page = new Page<>(pageNo, pageSize); + IPage pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model); + return Result.OK(pageList); + } catch (Exception e) { + return Result.error("查询评论/@消息失败: " + e.getMessage()); + } + } + + @GetMapping("/likes") + public Result> 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 page = new Page<>(pageNo, pageSize); + IPage pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(page, model); + return Result.OK(pageList); + } catch (Exception e) { + return Result.error("查询点赞消息失败: " + e.getMessage()); + } + } +} diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java index 855f28dd..05dab4b6 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/message/handle/impl/SystemSendMsgHandle.java @@ -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-12162】OA项目改造,系统重消息拆分,目前消息都在一起 需按分类进行拆分--- - 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-12162】OA项目改造,系统重消息拆分,目前消息都在一起 需按分类进行拆分--- } } @@ -145,4 +145,70 @@ public class SystemSendMsgHandle implements ISendMsgHandle { } } } + + // 扩展msgCategory + private void doSend(String title, String msgContent, String fromUser, String toUser, Map 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 Date: Wed, 17 Sep 2025 10:10:38 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=A6=E6=9C=9F=E5=92=8C=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=85=81=E8=AE=B8=E4=B8=8B=E8=BD=BD=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/modules/aiol/entity/AiolCourse.java | 10 ++++++- .../src/views/aiol/AiolCourse.data.ts | 28 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolCourse.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolCourse.java index 09189c07..d5858443 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolCourse.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolCourse.java @@ -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; diff --git a/jeecgboot-vue3/src/views/aiol/AiolCourse.data.ts b/jeecgboot-vue3/src/views/aiol/AiolCourse.data.ts index 9eb44bbf..c79188c3 100644 --- a/jeecgboot-vue3/src/views/aiol/AiolCourse.data.ts +++ b/jeecgboot-vue3/src/views/aiol/AiolCourse.data.ts @@ -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',}, }; /** From a9e3e9146acd73ac21759b43a79fb7598192e120 Mon Sep 17 00:00:00 2001 From: GoCo Date: Wed, 17 Sep 2025 20:14:01 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E7=AB=A0=E8=8A=82=E8=BF=94=E5=9B=9E=E7=AB=A0=E8=8A=82id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/aiol/controller/AiolCourseSectionController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCourseSectionController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCourseSectionController.java index 0e2cd116..114ade77 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCourseSectionController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCourseSectionController.java @@ -114,7 +114,7 @@ public class AiolCourseSectionController extends JeecgController