Forráskód Böngészése

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

phoenix 2 éve
szülő
commit
76a26672a5
23 módosított fájl, 197 hozzáadás és 82 törlés
  1. 2 0
      src/main/java/com/xjrsoft/common/utils/WeChatUtil.java
  2. 8 5
      src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskAssignServiceImpl.java
  3. 9 9
      src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java
  4. 62 0
      src/main/java/com/xjrsoft/module/oa/utils/SendMessageUtil.java
  5. 1 0
      src/main/java/com/xjrsoft/module/organization/service/IWeChatService.java
  6. 5 1
      src/main/java/com/xjrsoft/module/organization/service/impl/WeChatServiceImgl.java
  7. 10 5
      src/main/java/com/xjrsoft/module/student/controller/BaseStudentPostController.java
  8. 1 0
      src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java
  9. 6 0
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java
  10. 1 1
      src/main/java/com/xjrsoft/module/student/mapper/BaseStudentPostMapper.java
  11. 1 1
      src/main/java/com/xjrsoft/module/student/service/IBaseStudentPostService.java
  12. 1 1
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentPostServiceImpl.java
  13. 9 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentPostPageVo.java
  14. 3 1
      src/main/java/com/xjrsoft/module/system/controller/MenuController.java
  15. 0 1
      src/main/java/com/xjrsoft/module/system/dto/MenuTreeDto.java
  16. 1 0
      src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java
  17. 3 1
      src/main/java/com/xjrsoft/module/workflow/utils/WorkFlowUtil.java
  18. 2 2
      src/main/resources/mapper/student/BaseStudentAssessmentInspectionMapper.xml
  19. 4 4
      src/main/resources/mapper/student/BaseStudentBehaviorManageMapper.xml
  20. 2 2
      src/main/resources/mapper/student/BaseStudentPunishmentInfoMapper.xml
  21. 53 0
      src/main/resources/sqlScript/20231120_sql.sql
  22. 13 0
      src/test/java/com/xjrsoft/xjrsoftboot/StrTest.java
  23. 0 48
      src/test/java/com/xjrsoft/xjrsoftboot/mysql.sql

+ 2 - 0
src/main/java/com/xjrsoft/common/utils/WeChatUtil.java

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.organization.dto.WeChatDepartDto;
 import com.xjrsoft.module.organization.dto.WeChatUserDto;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -14,6 +15,7 @@ import java.util.HashMap;
 import java.util.List;
 
 @Component
+@Data
 public class WeChatUtil {
     @Value("${xjrsoft.enterpriseWeChat.corpid}")
     public String appKey;

+ 8 - 5
src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskAssignServiceImpl.java

@@ -67,11 +67,14 @@ public class MaterialTaskAssignServiceImpl   extends MPJBaseServiceImpl<Material
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean delete(List<Long> ids) {
-        MaterialTaskAssign materialTaskAssign = materialTaskAssignMapper.selectOne(Wrappers.lambdaQuery(MaterialTaskAssign.class).in(MaterialTaskAssign::getId, ids));
-        MaterialTask materialTask = materialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
-        int count = materialTaskAssignMapper.deleteBatchIds(ids);
-        materialTask.setAssignPerson(materialTask.getAssignPerson() - count);
-        materialTaskMapper.updateById(materialTask);
+        List<MaterialTaskAssign> materialTaskAssignList = materialTaskAssignMapper.selectList(Wrappers.lambdaQuery(MaterialTaskAssign.class).in(MaterialTaskAssign::getId, ids));
+        for (MaterialTaskAssign materialTaskAssign : materialTaskAssignList) {
+            MaterialTask materialTask = materialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
+            int count = materialTaskAssignMapper.deleteBatchIds(ids);
+            materialTask.setAssignPerson(materialTask.getAssignPerson() - count);
+            materialTaskMapper.updateById(materialTask);
+        }
+
         return true;
     }
 

+ 9 - 9
src/main/java/com/xjrsoft/module/oa/service/impl/NewsServiceImpl.java

@@ -266,22 +266,22 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                     for (User user : userList) {
                         WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                         weChatSendMessageDto.setUserId(user.getOpenId());
-                        weChatSendMessageDto.setTemplateId("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM");
-                        weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id=" + id);
+                        weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4OkNNQ0uxlj2-ed9m6uWO-v4");
+                        weChatSendMessageDto.setUrl("/pages/message/notice/detail?id=" + id);
                         weChatSendMessageDto.setMsgId(id.toString());
                         JSONObject data = new JSONObject();
 
                         JSONObject data1 = new JSONObject();
                         data1.put("value", news.getFullHead());
-                        data.put("thing2", data1);
+                        data.put("thing23", data1);
 
                         JSONObject data2 = new JSONObject();
                         data2.put("value", news.getAuthorName());
-                        data.put("phrase5", data2);
+                        data.put("thing18", data2);
 
                         JSONObject data3 = new JSONObject();
                         data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss"));
-                        data.put("time3", data3);
+                        data.put("time17", data3);
                         weChatSendMessageDto.setContent(data);
                         weChatService.sendTemplateMessage(weChatSendMessageDto);
                     }
@@ -299,21 +299,21 @@ public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implem
                         WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
                         weChatSendMessageDto.setUserId(newsRelationVo.getUserName());
                         weChatSendMessageDto.setTemplateId("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM");
-                        weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id=" + id);
+                        weChatSendMessageDto.setUrl("/pages/message/notice/detail?id=" + id);
                         weChatSendMessageDto.setMsgId(id.toString());
                         JSONObject data = new JSONObject();
 
                         JSONObject data1 = new JSONObject();
                         data1.put("value", news.getFullHead());
-                        data.put("thing2", data1);
+                        data.put("thing23", data1);
 
                         JSONObject data2 = new JSONObject();
                         data2.put("value", news.getAuthorName());
-                        data.put("phrase5", data2);
+                        data.put("thing18", data2);
 
                         JSONObject data3 = new JSONObject();
                         data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss"));
-                        data.put("time3", data3);
+                        data.put("time17", data3);
                         weChatSendMessageDto.setContent(data);
                         weChatService.sendTemplateMessage(weChatSendMessageDto);
                     }

+ 62 - 0
src/main/java/com/xjrsoft/module/oa/utils/SendMessageUtil.java

@@ -5,11 +5,14 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.mail.MailAccount;
 import cn.hutool.extra.mail.MailUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.MessageType;
 import com.xjrsoft.common.enums.YesOrNoEnum;
 import com.xjrsoft.common.sms.SmsSender;
+import com.xjrsoft.common.utils.LocalDateTimeUtil;
 import com.xjrsoft.common.utils.RedisUtil;
+import com.xjrsoft.common.utils.WeChatUtil;
 import com.xjrsoft.module.oa.entity.Message;
 import com.xjrsoft.module.oa.service.IMessageService;
 import com.xjrsoft.module.organization.entity.User;
@@ -59,6 +62,65 @@ public class SendMessageUtil {
         messageService.save(message);
     }
 
+    /**
+     * 发送工作流审批微信消息
+     */
+    public static void sendWorkflowApproveWx(NoticePolicyParam param, String name) {
+        IUserService userService = SpringUtil.getBean(IUserService.class);
+        RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class);
+
+        WeChatUtil weChatUtil = SpringUtil.getBean(WeChatUtil.class);
+
+        //获取用户相关信息
+        List<User> userList = redisUtil.get(GlobalConstant.USER_CACHE_KEY, new TypeReference<List<User>>() {
+        });
+        //如果缓存中不存在用户信息,就直接去数据库查询,并保存到缓存中去
+        if (userList.size() == 0) {
+            userList = userService.list();
+            redisUtil.set(GlobalConstant.USER_CACHE_KEY, userList);
+        }
+
+        if (param.getNoticeUserIds().size() > 0) {
+            for (Long userId : param.getNoticeUserIds()) {
+                User user = userList.stream().filter(u -> userId.equals(u.getId())).findFirst().orElse(new User());
+                String openId = user.getOpenId();
+
+                if (StrUtil.isEmpty(openId)) {
+                    break;
+                }
+
+                JSONObject data = new JSONObject();
+                // 任务名称
+                data.put("thing8", new JSONObject() {{
+                    put("value", param.getSchemaName());
+                }});
+                // 事项名称
+                data.put("thing2", new JSONObject() {{
+                    put("value", String.format("《%s》发起了《%s》,待审批!", param.getStartUserName(), param.getSchemaName()));
+                }});
+                // 申请人
+                data.put("thing6", new JSONObject() {{
+                    put("value", param.getStartUserName());
+                }});
+                // 时间
+                data.put("time3", new JSONObject() {{
+                    put("value", LocalDateTimeUtil.format(LocalDateTime.now(), LocalDateTimeUtil.LOCAL_DATE_TIME_FORMAT));
+                }});
+
+                JSONObject object = new JSONObject();
+                object.put("touser", openId);
+                object.put("template_id", "sHsmz7LRj7HLd7GSTS3r2jCLvK-4Wp19iGzEvYK8n_I");
+                object.put("miniprogram", new JSONObject() {{
+                    put("appid", weChatUtil.getAppletAppKey());
+                    put("pagepath", StrUtil.format("/xjrsoft/pages/workflow/approval?taskId={}&processId={}&type=todo", param.getTaskId(), param.getProcessId()));
+                }});
+                object.put("client_msg_id", param.getTaskId());
+                object.put("data", data);
+                weChatUtil.sendTemplateMessage(object);
+            }
+        }
+    }
+
     /**
      * 添加工作流审批消息
      */

+ 1 - 0
src/main/java/com/xjrsoft/module/organization/service/IWeChatService.java

@@ -7,5 +7,6 @@ public interface IWeChatService {
 
 
     void sendTemplateMessage(WeChatSendMessageDto dto);
+
     boolean updateInfo();
 }

+ 5 - 1
src/main/java/com/xjrsoft/module/organization/service/impl/WeChatServiceImgl.java

@@ -2,6 +2,7 @@ package com.xjrsoft.module.organization.service.impl;
 
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.xjrsoft.common.enums.DeleteMark;
@@ -47,7 +48,10 @@ public class WeChatServiceImgl implements IWeChatService {
         JSONObject object = new JSONObject();
         object.put("touser", dto.getUserId());
         object.put("template_id", dto.getTemplateId());
-        object.put("url", dto.getUrl());
+        object.put("miniprogram", new JSONObject() {{
+            put("appid", weChatUtil.getAppletAppKey());
+            put("pagepath", dto.getUrl());
+        }});
         object.put("client_msg_id", dto.getMsgId());
         object.put("data", dto.getContent());
         weChatUtil.sendTemplateMessage(object);

+ 10 - 5
src/main/java/com/xjrsoft/module/student/controller/BaseStudentPostController.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.toolkit.MPJWrappers;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -24,8 +25,10 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.xjrsoft.module.student.entity.BaseStudentBehaviorProject;
+import com.xjrsoft.module.student.entity.BaseStudentUser;
 import com.xjrsoft.module.student.vo.BaseStudentPostListVo;
 import com.xjrsoft.module.student.vo.BaseStudentPostTreeVo;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
 import org.springframework.http.ResponseEntity;
 import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
@@ -81,11 +84,13 @@ public class BaseStudentPostController {
     @SaCheckPermission("basestudentpost:detail")
     public RT<PageOutput<BaseStudentPostPageVo>> page(@Valid BaseStudentPostPageDto dto){
 
-        LambdaQueryWrapper<BaseStudentPost> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper
-                    .orderByDesc(BaseStudentPost::getId)
-                .select(BaseStudentPost.class,x -> VoToColumnUtil.fieldsToColumns(BaseStudentPostPageVo.class).contains(x.getProperty()));
-        IPage<BaseStudentPost> page = baseStudentPostService.page(ConventPage.getPage(dto), queryWrapper);
+        IPage<BaseStudentPostPageVo> page = baseStudentPostService.selectJoinListPage(ConventPage.getPage(dto), BaseStudentPostPageVo.class,
+                MPJWrappers.<BaseStudentPost>lambdaJoin()
+                .orderByDesc(BaseStudentPost::getSortCode)
+                .selectAs(DictionaryDetail::getName, BaseStudentPostPageVo::getLevelCn)
+                .select(BaseStudentPost.class,x -> VoToColumnUtil.fieldsToColumns(BaseStudentPostPageVo.class).contains(x.getProperty()))
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, BaseStudentPost::getLevel)
+        );
         PageOutput<BaseStudentPostPageVo> pageOutput = ConventPage.getPageOutput(page, BaseStudentPostPageVo.class);
         return RT.ok(pageOutput);
     }

+ 1 - 0
src/main/java/com/xjrsoft/module/student/controller/StudentManagerController.java

@@ -52,6 +52,7 @@ public class StudentManagerController {
                         .like(StrUtil.isNotBlank(dto.getMobile()), BaseStudentUser::getMobile, dto.getMobile())
                         .like(StrUtil.isNotBlank(dto.getName()), BaseStudentUser::getName, dto.getName())
                         .like(StrUtil.isNotBlank(dto.getEmail()), BaseStudentUser::getEmail, dto.getEmail())
+                        .eq(ObjectUtil.isNotNull(dto.getClassId()), BaseStudent::getId, dto.getClassId())
                         .in((ObjectUtil.isNotNull(dto.getTokenType()) && dto.getTokenType() == 1), BaseClass::getTeacherId, StpUtil.getLoginIdAsLong())
                         .orderByDesc(BaseStudentUser::getId)
                         .select(BaseStudentUser::getId)

+ 6 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java

@@ -35,4 +35,10 @@ public class BaseStudentUserPageDto extends PageInput {
     @ApiModelProperty("权限标识")
     private Integer tokenType;
 
+    /**
+     * 班级id
+     */
+    @ApiModelProperty("班级id")
+    private Long classId;
+
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/mapper/BaseStudentPostMapper.java

@@ -12,6 +12,6 @@ import org.apache.ibatis.annotations.Mapper;
 * @Version 1.0
 */
 @Mapper
-public interface BaseStudentPostMapper extends BaseMapper<BaseStudentPost> {
+public interface BaseStudentPostMapper extends MPJBaseMapper<BaseStudentPost> {
 
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/service/IBaseStudentPostService.java

@@ -13,5 +13,5 @@ import java.util.List;
 * @Version 1.0
 */
 
-public interface IBaseStudentPostService extends IService<BaseStudentPost> {
+public interface IBaseStudentPostService extends MPJBaseService<BaseStudentPost> {
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentPostServiceImpl.java

@@ -21,5 +21,5 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 */
 @Service
 @AllArgsConstructor
-public class BaseStudentPostServiceImpl extends ServiceImpl<BaseStudentPostMapper, BaseStudentPost> implements IBaseStudentPostService {
+public class BaseStudentPostServiceImpl extends MPJBaseServiceImpl<BaseStudentPostMapper, BaseStudentPost> implements IBaseStudentPostService {
 }

+ 9 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentPostPageVo.java

@@ -93,6 +93,15 @@ public class BaseStudentPostPageVo {
     @ExcelProperty("职务级别")
     @ApiModelProperty("职务级别")
     private String level;
+
+    /**
+     * 职务级别
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("职务级别中文")
+    @ApiModelProperty("职务级别中文")
+    private String levelCn;
+
     /**
     * 是否允许德育检查(1:是 0:否)
     */

+ 3 - 1
src/main/java/com/xjrsoft/module/system/controller/MenuController.java

@@ -90,7 +90,6 @@ public class MenuController {
     @ApiOperation(value = "查询角色菜单服务")
     public RT<List<MenuServeVo>> roleMenuServe(RoleMenuServeListDto dto) {
         List<MenuServeVo> list = menuService.getRoleMenuServe(dto);
-
         return RT.ok(list);
     }
 
@@ -105,6 +104,9 @@ public class MenuController {
     @GetMapping("/all-tree")
     @ApiOperation(value = "获取所有菜单(树结构)")
     public R allMenuTree(@Valid MenuTreeDto dto) {
+        if (StrUtil.isEmpty(dto.getSystemType())) {
+            dto.setSystemType(SystemTypeEnum.SYSTEMPC.getCode());
+        }
         List<MenuTreeVo> list = menuService.selectJoinList(MenuTreeVo.class,
                 MPJWrappers.<Menu>lambdaJoin()
                         .like(StrUtil.isNotEmpty(dto.getTitle()), Menu::getTitle, dto.getTitle())

+ 0 - 1
src/main/java/com/xjrsoft/module/system/dto/MenuTreeDto.java

@@ -16,7 +16,6 @@ import javax.validation.constraints.NotNull;
 public class MenuTreeDto {
 
     @Length(max = 20,message = "系统类型!")
-    @NotNull(message = "系统类型code不能为空")
     private String systemType;
 
     @Length(max = 20,message = "菜单名不能大于20个字符!")

+ 1 - 0
src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java

@@ -119,6 +119,7 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
                     MPJWrappers.<Menu>lambdaJoin()
                             .innerJoin(XjrMenuQuick.class, XjrMenuQuick::getMenuId, Menu::getId)
                             .in(XjrMenuQuick::getRoleId, roleIds)
+                            .eq(ObjectUtil.isNotEmpty(dto.getSystemType()), Menu::getSystemType, dto.getSystemType())
                             .selectAs(XjrMenuQuick::getSystemId, Menu::getSystemId)
                             .select(Menu::getId)
                             .select(Menu.class, x -> VoToColumnUtil.fieldsToColumns(Menu.class).contains(x.getProperty())));

+ 3 - 1
src/main/java/com/xjrsoft/module/workflow/utils/WorkFlowUtil.java

@@ -1133,7 +1133,9 @@ public class WorkFlowUtil {
             }
             //如果包含企业微信
             if (param.getNoticePolicyConfigs().contains(WorkflowNoticePolicyType.WECHAT.getCode())) {
-                //TODO 发送企业微信
+                CompletableFuture.runAsync(() -> {
+                    SendMessageUtil.sendWorkflowApproveWx(param, name);
+                });
             }
             //如果包含钉钉
             if (param.getNoticePolicyConfigs().contains(WorkflowNoticePolicyType.DING.getCode())) {

+ 2 - 2
src/main/resources/mapper/student/BaseStudentAssessmentInspectionMapper.xml

@@ -21,7 +21,7 @@
         left join xjr_user t5 on t.assessment_user_id=t5.id
         left join xjr_dictionary_detail t6 on t6.code=t.score_type
         where  t.delete_mark=0 and t1.delete_mark=0  and t2.delete_mark=0  and t3.delete_mark=0 and t.status=1
-        <if test="dto.projectIds != null and dto.projectIds.size()>0">
+        <if test="dto.projectIds != null and dto.projectIds.size() > 0">
             and t.base_student_assessment_project_id in
             <foreach item="projectId" index="index" collection="dto.projectIds" open="(" close=")" separator=",">
                 #{projectId}
@@ -75,7 +75,7 @@
         <foreach item="classId" index="index" collection="dto.classIds" open="(" close=")" separator=",">
             #{classId}
         </foreach>
-        <if test="dto.projectIds != null and dto.projectIds.size()>0">
+        <if test="dto.projectIds != null and dto.projectIds.size() > 0">
             and t1.base_student_assessment_project_id in
             <foreach item="projectId" index="index" collection="dto.projectIds" open="(" close=")" separator=",">
                 #{projectId}

+ 4 - 4
src/main/resources/mapper/student/BaseStudentBehaviorManageMapper.xml

@@ -35,7 +35,7 @@
         <if test="dto.endDate != null and dto.endDate != ''">
             and t.assessment_date &lt;= #{dto.endDate}
         </if>
-        <if test="dto.assessmentUserIds != null and dto.assessmentUserIds != ''">
+        <if test="dto.assessmentUserIds != null and dto.assessmentUserIds.size() > 0">
             AND t.assessment_user_id in
             <foreach item="userId" index="index" collection="dto.assessmentUserIds" open="(" close=")" separator=",">
                 #{userId}
@@ -77,19 +77,19 @@
         AND t5.class_id IN (
         SELECT id FROM base_class WHERE teacher_id = #{dto.teacherId}
         )
-        <if test="dto.gradeIds != null and dto.gradeIds != ''">
+        <if test="dto.gradeIds != null and dto.gradeIds.size() > 0">
             AND t5.grade_id in
             <foreach item="gradeId" index="index" collection="dto.gradeIds" open="(" close=")" separator=",">
                 #{gradeId}
             </foreach>
         </if>
-        <if test="dto.classIds != null and dto.classIds != ''">
+        <if test="dto.classIds != null and dto.classIds.size() > 0">
             AND t5.class_id in
             <foreach item="classId" index="index" collection="dto.classIds" open="(" close=")" separator=",">
                 #{classId}
             </foreach>
         </if>
-        <if test="dto.assessmentUserIds != null and dto.assessmentUserIds != ''">
+        <if test="dto.assessmentUserIds != null and dto.assessmentUserIds.size() > 0">
             AND t.assessment_user_id in
             <foreach item="assessmentUserId" index="index" collection="dto.assessmentUserIds" open="(" close=")" separator=",">
                 #{assessmentUserId}

+ 2 - 2
src/main/resources/mapper/student/BaseStudentPunishmentInfoMapper.xml

@@ -44,7 +44,7 @@
         LEFT JOIN base_class t5 ON t2.class_id = t5.id
         WHERE t1.status = 1 AND t1.delete_mark = 0 AND t3.delete_mark = 0 AND t2.delete_mark = 0
         AND t5.id IN (SELECT id  FROM base_class WHERE teacher_id  = #{dto.teacherId})
-        <if test="dto.punishmentTypeIds != null and dto.punishmentTypeIds != ''">
+        <if test="dto.punishmentTypeIds != null and dto.punishmentTypeIds.size() > 0">
             AND t4.id in
             <foreach item="punishmentTypeId" index="index" collection="dto.punishmentTypeIds" open="(" close=")" separator=",">
                 #{punishmentTypeId}
@@ -65,7 +65,7 @@
     </select>
 
     <select id="getMobileInfo" parameterType="com.xjrsoft.module.student.dto.BaseStudentPunishmentInfoMobileDetailDto" resultType="com.xjrsoft.module.student.vo.BaseStudentPunishmentInfoMobileDetailVo">
-        SELECT t.id,t3.name,t3.gender,t3.credential_number,t4.punishment_type,t1.reason,t1.start_time,t5.student_id,
+        SELECT t.id,t3.name as student_name,t3.gender,t3.credential_number,t4.punishment_type,t1.reason,t1.start_time,t5.student_id,
         t.adjust_date,t.adjust_type,t.adjust_reason,t.modify_date,t1.create_date,t1.is_publicity,t1.end_time,t.class_name,t.major FROM base_punishment_student_relation t
         INNER JOIN base_student_punishment_info t1 ON t.punishment_info_id = t1.id
         INNER JOIN base_student_school_roll t2 ON t.user_id = t2.user_id

+ 53 - 0
src/main/resources/sqlScript/20231120_sql.sql

@@ -0,0 +1,53 @@
+
+--------------------------------------------------------------------奖学金管理--------------------------------------------------------------------
+-- ----------------------------
+-- 奖学金类别
+-- ----------------------------
+DROP TABLE IF EXISTS base_student_scholarship_category;
+CREATE TABLE base_student_scholarship_category
+(
+    id BIGINT NOT NULL COMMENT '主键编号',
+    `create_user_id` BIGINT NULL DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id` BIGINT NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark` INT NOT NULL COMMENT '删除标记',
+    `enabled_mark` INT NOT NULL COMMENT '有效标志',
+    `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
+    `name` VARCHAR(200) NOT NULL COMMENT '名称',
+    `scholarship_source` int NOT NULL DEFAULT 0 COMMENT '奖学金来源(xjr_dictionary_item[scholarship_source])',
+    `base_semester_id` bigint NULL DEFAULT NULL COMMENT '学期ID(base_semester)',
+    `total_score` double NOT NULL DEFAULT 0 COMMENT '总金额',
+    `scholarship_level` int NOT NULL DEFAULT 0 COMMENT '奖学金等级 0=无等级',
+    `remark` VARCHAR(1000) COMMENT '备注',
+    PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '奖学金类别';
+
+-- ----------------------------
+-- 奖学金级别
+-- ----------------------------
+DROP TABLE IF EXISTS base_student_scholarship_level;
+CREATE TABLE base_student_scholarship_level
+(
+    id BIGINT NOT NULL COMMENT '主键编号',
+    `create_user_id` BIGINT NULL DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id` BIGINT NULL DEFAULT NULL COMMENT '修改人',
+    `modify_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
+    `delete_mark` INT NOT NULL COMMENT '删除标记',
+    `enabled_mark` INT NOT NULL COMMENT '有效标志',
+    `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
+    `base_student_scholarship_category_id` bigint NULL DEFAULT NULL COMMENT '奖学金类别ID(base_student_scholarship_category)',
+    `level` int NOT NULL DEFAULT 0 COMMENT '奖学金等级 0=无等级',
+    `score` double NOT NULL DEFAULT 0 COMMENT '金额',
+    PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '奖学金级别';
+--------------------------------------------------------------------奖学金管理--------------------------------------------------------------------
+
+
+
+
+
+
+
+

+ 13 - 0
src/test/java/com/xjrsoft/xjrsoftboot/StrTest.java

@@ -0,0 +1,13 @@
+package com.xjrsoft.xjrsoftboot;
+
+import cn.hutool.core.util.StrUtil;
+import org.junit.jupiter.api.Test;
+
+public class StrTest {
+    @Test
+    public void formatTest() {
+        String f = "《{}》等待{}审批。";
+
+        System.out.println(StrUtil.format(f, "sdfsdf","bbbbbb"));
+    }
+}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 48
src/test/java/com/xjrsoft/xjrsoftboot/mysql.sql


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott