ソースを参照

班级动态调整

dzx 7 ヶ月 前
コミット
d7eae5572b

+ 7 - 28
src/main/java/com/xjrsoft/module/base/controller/BaseClassDynamicsController.java

@@ -6,6 +6,7 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
@@ -15,14 +16,12 @@ import com.xjrsoft.module.base.dto.AddBaseClassDynamicsDto;
 import com.xjrsoft.module.base.dto.BaseClassDynamicsPageDto;
 import com.xjrsoft.module.base.dto.UpdateBaseClassDynamicsDto;
 import com.xjrsoft.module.base.entity.BaseClassDynamics;
-import com.xjrsoft.module.base.entity.BaseUserStudent;
+import com.xjrsoft.module.base.entity.BaseClassDynamicsRelation;
 import com.xjrsoft.module.base.service.IBaseClassDynamicsService;
-import com.xjrsoft.module.base.service.IBaseUserStudentService;
 import com.xjrsoft.module.base.vo.BaseClassDynamicsPageVo;
 import com.xjrsoft.module.base.vo.BaseClassDynamicsVo;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.service.IUserService;
-import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.service.IFileService;
 import io.swagger.annotations.Api;
@@ -38,7 +37,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -56,8 +54,6 @@ public class BaseClassDynamicsController {
 
 
     private final IBaseClassDynamicsService baseClassDynamicsService;
-    private final IBaseStudentSchoolRollService rollService;
-    private final IBaseUserStudentService userStudentService;
     private final IUserService userService;
     private final IFileService fileService;
 
@@ -66,28 +62,13 @@ public class BaseClassDynamicsController {
     @SaCheckPermission("baseclassdynamics:detail")
     @XjrLog(value = "班级动态表列表(分页)")
     public RT<PageOutput<BaseClassDynamicsPageVo>> page(@Valid BaseClassDynamicsPageDto dto) {
-        List<String> roleList = StpUtil.getRoleList();
         long userId = StpUtil.getLoginIdAsLong();
-        Integer roleType = null;
-        List<Long> classIds = new ArrayList<>();
-        if (roleList.contains("STUDENT")) {
-            roleType = 3;
-            classIds.add(rollService.getClassIdByUserId(userId));
-        }
-        if (roleList.contains("PARENT")) {
-            roleType = 4;
-            List<BaseUserStudent> list = userStudentService.list(new QueryWrapper<BaseUserStudent>().lambda().eq(BaseUserStudent::getUserId, userId));
-            for (BaseUserStudent userStudent : list) {
-                classIds.add(rollService.getClassIdByUserId(userStudent.getStudentId()));
-            }
-        }
-
-        LambdaQueryWrapper<BaseClassDynamics> queryWrapper = new LambdaQueryWrapper<>();
+        MPJLambdaWrapper<BaseClassDynamics> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper
-                .orderByDesc(BaseClassDynamics::getId)
                 .select(BaseClassDynamics.class, x -> VoToColumnUtil.fieldsToColumns(BaseClassDynamicsPageVo.class).contains(x.getProperty()))
-                .like(roleType != null, BaseClassDynamics::getRoleType, roleType)
-                .in(!classIds.isEmpty(), BaseClassDynamics::getClassId, classIds)
+                .innerJoin(BaseClassDynamicsRelation.class, BaseClassDynamicsRelation::getBaseClassDynamicsId, BaseClassDynamics::getId)
+                .eq(BaseClassDynamicsRelation::getUserId, userId)
+                .orderByDesc(BaseClassDynamics::getId)
         ;
         IPage<BaseClassDynamics> page = baseClassDynamicsService.page(ConventPage.getPage(dto), queryWrapper);
         PageOutput<BaseClassDynamicsPageVo> pageOutput = ConventPage.getPageOutput(page, BaseClassDynamicsPageVo.class);
@@ -140,9 +121,7 @@ public class BaseClassDynamicsController {
     @SaCheckPermission("baseclassdynamics:add")
     @XjrLog(value = "新增班级动态表", saveResponseData = true)
     public RT<Boolean> add(@Valid @RequestBody AddBaseClassDynamicsDto dto) {
-        BaseClassDynamics baseClassDynamics = BeanUtil.toBean(dto, BaseClassDynamics.class);
-        baseClassDynamics.setCreateDate(new Date());
-        boolean isSuccess = baseClassDynamicsService.save(baseClassDynamics);
+        Boolean isSuccess = baseClassDynamicsService.add(dto);
         return RT.ok(isSuccess);
     }
 

+ 53 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseClassDynamicsRelation.java

@@ -0,0 +1,53 @@
+package com.xjrsoft.module.base.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+
+/**
+ * @title: 班级动态表阅读表
+ * @Author dzx
+ * @Date: 2025年4月27日
+ * @Version 1.0
+ */
+@Data
+@TableName("base_class_dynamics_relation")
+@ApiModel(value = "base_class_dynamics_relation", description = "班级动态表阅读表")
+public class BaseClassDynamicsRelation implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+
+    @ApiModelProperty("阅读时间")
+    private LocalDateTime readDate;
+
+    @ApiModelProperty("动态id(base_class_dynamics)")
+    private Long baseClassDynamicsId;
+
+    @ApiModelProperty("是否已阅读(0:否 1:是)")
+    private Integer readMark;
+
+
+    @ApiModelProperty("阅读用户")
+    private Long userId;
+
+    @ApiModelProperty("回复内容")
+    private String replyContent;
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/base/mapper/BaseClassDynamicsRelationMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.base.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.base.entity.BaseClassDynamics;
+import com.xjrsoft.module.base.entity.BaseClassDynamicsRelation;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @title: 班级动态表
+ * @Author dzx
+ * @Date: 2024-09-04
+ * @Version 1.0
+ */
+@Mapper
+public interface BaseClassDynamicsRelationMapper extends MPJBaseMapper<BaseClassDynamicsRelation> {
+
+}

+ 3 - 0
src/main/java/com/xjrsoft/module/base/service/IBaseClassDynamicsService.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.base.service;
 
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.base.dto.AddBaseClassDynamicsDto;
 import com.xjrsoft.module.base.entity.BaseClassDynamics;
 
 /**
@@ -11,4 +12,6 @@ import com.xjrsoft.module.base.entity.BaseClassDynamics;
  */
 
 public interface IBaseClassDynamicsService extends MPJBaseService<BaseClassDynamics> {
+
+    Boolean add(AddBaseClassDynamicsDto dto);
 }

+ 135 - 0
src/main/java/com/xjrsoft/module/base/service/impl/BaseClassDynamicsServiceImpl.java

@@ -1,11 +1,41 @@
 package com.xjrsoft.module.base.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.utils.LocalDateTimeUtil;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.config.CommonPropertiesConfig;
+import com.xjrsoft.module.base.dto.AddBaseClassDynamicsDto;
+import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.entity.BaseClassDynamics;
+import com.xjrsoft.module.base.entity.BaseClassDynamicsRelation;
 import com.xjrsoft.module.base.mapper.BaseClassDynamicsMapper;
+import com.xjrsoft.module.base.mapper.BaseClassDynamicsRelationMapper;
 import com.xjrsoft.module.base.service.IBaseClassDynamicsService;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserStudent;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.service.IWeChatService;
+import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.service.IBaseStudentService;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
+import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import lombok.AllArgsConstructor;
+import me.zhyd.oauth.log.Log;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @title: 班级动态表
@@ -16,4 +46,109 @@ import org.springframework.stereotype.Service;
 @Service
 @AllArgsConstructor
 public class BaseClassDynamicsServiceImpl extends MPJBaseServiceImpl<BaseClassDynamicsMapper, BaseClassDynamics> implements IBaseClassDynamicsService {
+
+    private final IBaseStudentService studentService;
+    private final IUserService userService;
+    private final BaseClassDynamicsRelationMapper dynamicsRelationMapper;
+    private final CommonPropertiesConfig commonPropertiesConfig;
+    private final IWeChatService weChatService;
+    private final IBaseClassService classService;
+    @Override
+    @Transactional
+    public Boolean add(AddBaseClassDynamicsDto dto) {
+        LocalDateTime now = LocalDateTime.now();
+        BaseClassDynamics baseClassDynamics = BeanUtil.toBean(dto, BaseClassDynamics.class);
+        baseClassDynamics.setCreateDate(new Date());
+        this.save(baseClassDynamics);
+
+        BaseClass aClass = classService.getById(dto.getClassId());
+
+        List<Long> classIds = new ArrayList<>();
+        classIds.add(dto.getClassId());
+        List<BaseStudentUserPageVo> studentList = studentService.getStudentList(new BaseStudentUserPageDto() {{
+            setClassIds(classIds);
+        }});
+        for (BaseStudentUserPageVo studentUserPageVo : studentList) {
+            BaseClassDynamicsRelation dynamicsRelation = new BaseClassDynamicsRelation() {{
+                setBaseClassDynamicsId(baseClassDynamics.getId());
+                setUserId(Long.parseLong(studentUserPageVo.getId()));
+                setReadMark(0);
+            }};
+            dynamicsRelationMapper.insert(dynamicsRelation);
+
+            try {
+                WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+                weChatSendMessageDto.setUserId(studentUserPageVo.getOpenId());
+                weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
+                weChatSendMessageDto.setUrl(StrUtil.format("{}pages/student/trends/detail?id={}", commonPropertiesConfig.getDomainApp(), baseClassDynamics.getId()));
+                weChatSendMessageDto.setMsgId(dynamicsRelation.getId().toString());
+                JSONObject data = new JSONObject();
+
+                JSONObject data1 = new JSONObject();
+                data1.put("value", baseClassDynamics.getTitle());
+                data.put("thing23", data1);
+
+                JSONObject data2 = new JSONObject();
+                data2.put("value", (aClass.getName() == null) ? "重庆铜梁职业教育中心" : aClass.getName());
+                data.put("thing29", data2);
+
+                JSONObject data3 = new JSONObject();
+                data3.put("value", LocalDateTimeUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
+                data.put("time17", data3);
+                weChatSendMessageDto.setContent(data);
+                weChatService.sendTemplateMessage(weChatSendMessageDto);
+            }catch (Exception e){
+                Log.error(e.getMessage());
+            }
+        }
+
+        List<User> list = userService.list(
+                new MPJLambdaWrapper<User>()
+                        .select(User::getId)
+                        .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
+                        .innerJoin(UserStudent.class, UserStudent::getUserId, User::getId)
+                        .innerJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, UserStudent::getStudentId)
+                        .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, UserStudent::getId)
+                        .eq(BaseStudentSchoolRoll::getClassId, dto.getClassId())
+                        .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
+                        .isNotNull(User::getOpenId)
+        );
+
+        for (User user : list) {
+            BaseClassDynamicsRelation dynamicsRelation = new BaseClassDynamicsRelation() {{
+                setBaseClassDynamicsId(baseClassDynamics.getId());
+                setUserId(user.getId());
+                setReadMark(0);
+            }};
+            dynamicsRelationMapper.insert(dynamicsRelation);
+
+            try {
+                WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
+                weChatSendMessageDto.setUserId(user.getOpenId());
+                weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
+                weChatSendMessageDto.setUrl(StrUtil.format("{}pages/student/trends/detail?id={}", commonPropertiesConfig.getDomainApp(), baseClassDynamics.getId()));
+                weChatSendMessageDto.setMsgId(dynamicsRelation.getId().toString());
+                JSONObject data = new JSONObject();
+
+                JSONObject data1 = new JSONObject();
+                data1.put("value", baseClassDynamics.getTitle());
+                data.put("thing23", data1);
+
+                JSONObject data2 = new JSONObject();
+                data2.put("value", (aClass.getName() == null) ? "重庆铜梁职业教育中心" : aClass.getName());
+                data.put("thing29", data2);
+
+                JSONObject data3 = new JSONObject();
+                data3.put("value", LocalDateTimeUtil.format(now, "yyyy-MM-dd HH:mm:ss"));
+                data.put("time17", data3);
+                weChatSendMessageDto.setContent(data);
+                weChatService.sendTemplateMessage(weChatSendMessageDto);
+            }catch (Exception e){
+                Log.error(e.getMessage());
+            }
+        }
+
+
+        return true;
+    }
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java

@@ -53,4 +53,7 @@ public class BaseStudentUserPageVo {
 
     @ApiModelProperty("年级姓名")
     private String gradeName;
+
+    @ApiModelProperty("微信openId")
+    private String openId;
 }

+ 1 - 1
src/main/resources/mapper/student/BaseStudentMapper.xml

@@ -138,7 +138,7 @@
     <select id="getStudentList" parameterType="com.xjrsoft.module.student.dto.BaseStudentUserPageDto" resultType="com.xjrsoft.module.student.vo.BaseStudentUserPageVo">
         SELECT t1.id,t4.name AS class_name,t5.name AS teacher_name,t1.name,t1.gender AS gender_cn,t1.credential_number,
         t1.mobile,t3.archives_status AS archives_status_cn ,t3.stduy_status AS stduy_status_cn,t3.student_type AS student_type_cn,
-        t3.learn_status as learn_status_cn,t3.grade_id,t6.name as grade_name,t3.class_id FROM xjr_user t1
+        t3.learn_status as learn_status_cn,t3.grade_id,t6.name as grade_name,t3.class_id,t1.open_id FROM xjr_user t1
         INNER JOIN base_student t2 ON t1.id = t2.user_id
         LEFT JOIN base_student_school_roll t3 ON t1.id = t3.user_id
         LEFT JOIN base_class t4 ON t4.id = t3.class_id