Bläddra i källkod

增加时间检查

brealinxx 1 år sedan
förälder
incheckning
39ea77f250

+ 7 - 22
src/main/java/com/xjrsoft/module/assessment/service/impl/AssessmentTemplatePlanServiceImpl.java

@@ -463,11 +463,7 @@ class AssessmentTemplatePlanServiceImpl extends MPJBaseServiceImpl<AssessmentTem
                             Integer count = answerCountMap.get(assessmentQuestion.getParentId().toString() + assessmentQuestion.getId().toString());
                             questionVo.setCount(count == null?0:count);
 
-                            BigDecimal bigDecimal = BigDecimal.valueOf(questionVo.getCount())
-                                    .divide(BigDecimal.valueOf(vo.getStudentCount()))
-                                    .multiply(BigDecimal.valueOf(100))
-                                    .setScale(2, RoundingMode.HALF_UP);
-                            questionVo.setPercentage(bigDecimal.floatValue());
+                            questionVo.setPercentage(vo.getStudentCount());
                             optionList.add(questionVo);
                         }
                     }
@@ -476,22 +472,14 @@ class AssessmentTemplatePlanServiceImpl extends MPJBaseServiceImpl<AssessmentTem
                     optionList.add(new AssessmentQuestionOptionResultVo(){{
                         setName("是");
                         Integer count = answerCountMap.get(twoQuestion.getId().toString() + "1");
-                        BigDecimal bigDecimal = BigDecimal.valueOf(count == null?0:count)
-                                .divide(BigDecimal.valueOf(vo.getStudentCount()))
-                                .multiply(BigDecimal.valueOf(100))
-                                .setScale(2, RoundingMode.HALF_UP);
-                        setPercentage(bigDecimal.floatValue());
-                        setCount(count);
+                        setPercentage(vo.getStudentCount());
+                        setCount(count == null?0:count);
                     }});
                     optionList.add(new AssessmentQuestionOptionResultVo(){{
                         setName("否");
                         Integer count = answerCountMap.get(twoQuestion.getId().toString() + "2");
-                        BigDecimal bigDecimal = BigDecimal.valueOf(count == null?0:count)
-                                .divide(BigDecimal.valueOf(vo.getStudentCount()))
-                                .multiply(BigDecimal.valueOf(100))
-                                .setScale(2, RoundingMode.HALF_UP);
-                        setPercentage(bigDecimal.floatValue());
-                        setCount(count);
+                        setPercentage(vo.getStudentCount());
+                        setCount(count == null?0:count);
                     }});
                 }else if("scale_question".equals(twoQuestion.getType())) {
                     for (AssessmentPlanAnswerDetailVo detailVo : scaleQuestionResult) {
@@ -499,11 +487,8 @@ class AssessmentTemplatePlanServiceImpl extends MPJBaseServiceImpl<AssessmentTem
                             optionList.add(new AssessmentQuestionOptionResultVo(){{
                                 setName(detailVo.getAnswerId());
                                 Integer count = detailVo.getChooseCount();
-                                BigDecimal bigDecimal = BigDecimal.valueOf(count == null?0:count)
-                                        .divide(BigDecimal.valueOf(vo.getStudentCount())).multiply(BigDecimal.valueOf(100))
-                                        .setScale(2, RoundingMode.HALF_UP);
-                                setPercentage(bigDecimal.floatValue());
-                                setCount(count);
+                                setPercentage(vo.getStudentCount());
+                                setCount(count == null?0:count);
                             }});
                         }
                     }

+ 1 - 1
src/main/java/com/xjrsoft/module/assessment/vo/AssessmentQuestionOptionResultVo.java

@@ -22,6 +22,6 @@ public class AssessmentQuestionOptionResultVo implements Serializable {
     private Integer count = 0;
 
     @ApiModelProperty("占比")
-    private Float percentage;
+    private Integer percentage;
 
 }

+ 4 - 4
src/main/java/com/xjrsoft/module/asset/controller/WfAssetManageController.java

@@ -219,20 +219,20 @@ public class WfAssetManageController {
 
     }
 
-    @PostMapping("/select-record-query")
+    @PostMapping("/select-record-export-query")
     @ApiOperation(value = "选中记录导出")
     public ResponseEntity<byte[]> assetManageSelectRecordQuery(@Valid @RequestBody WfAssetManageSelectRecordQueryDto dto) {
-//    @GetMapping("/select-record-query")
+//    @GetMapping("/select-record-export-query")
 //    @ApiOperation(value = "选中记录导出")
 //    public ResponseEntity<byte[]> assetManageSelectRecordQuery(@Valid WfAssetManageSelectRecordQueryDto dto) {
         ByteArrayOutputStream bot = wfAssetManageService.listWfAssetManageSelectRecordQuery(dto);
         return RT.fileStream(bot.toByteArray(), "WfAssetManage" + ExcelTypeEnum.XLSX.getValue());
     }
 
-    @PostMapping("/conditional-search-query")
+    @PostMapping("/conditional-search-export-query")
     @ApiOperation(value = "条件搜索导出")
     public ResponseEntity<byte[]> assetManageConditionalSearchQuery(@Valid @RequestBody WfAssetManageConditionalSearchQueryDto dto) {
-//    @GetMapping("/conditional-search-query")
+//    @GetMapping("/conditional-search-export-query")
 //    @ApiOperation(value = "条件搜索导出")
 //    public ResponseEntity<byte[]> textbookClaimExportQuery(@Valid WfAssetManageConditionalSearchQueryDto dto) {
         ByteArrayOutputStream bot = wfAssetManageService.listWfAssetManageConditionalSearchQuery(dto);

+ 84 - 7
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -25,18 +25,58 @@ import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.service.IBaseClassService;
-import com.xjrsoft.module.organization.dto.*;
-import com.xjrsoft.module.organization.entity.*;
-import com.xjrsoft.module.organization.service.*;
+import com.xjrsoft.module.organization.dto.AddUserDto;
+import com.xjrsoft.module.organization.dto.BindOpenidDto;
+import com.xjrsoft.module.organization.dto.LoginResetPasswordDto;
+import com.xjrsoft.module.organization.dto.RegisterDto;
+import com.xjrsoft.module.organization.dto.ResetPasswordDto;
+import com.xjrsoft.module.organization.dto.UpdateInfoDto;
+import com.xjrsoft.module.organization.dto.UpdatePasswordDto;
+import com.xjrsoft.module.organization.dto.UpdateUserDto;
+import com.xjrsoft.module.organization.dto.UserPageDto;
+import com.xjrsoft.module.organization.dto.UserStudentAddDto;
+import com.xjrsoft.module.organization.dto.UserStudentBindDto;
+import com.xjrsoft.module.organization.dto.UserStudentDeleteDto;
+import com.xjrsoft.module.organization.entity.Department;
+import com.xjrsoft.module.organization.entity.Post;
+import com.xjrsoft.module.organization.entity.Role;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserDeptRelation;
+import com.xjrsoft.module.organization.entity.UserPostRelation;
+import com.xjrsoft.module.organization.entity.UserRoleRelation;
+import com.xjrsoft.module.organization.service.IDepartmentService;
+import com.xjrsoft.module.organization.service.IPostService;
+import com.xjrsoft.module.organization.service.IRoleService;
+import com.xjrsoft.module.organization.service.IUserDeptRelationService;
+import com.xjrsoft.module.organization.service.IUserPostRelationService;
+import com.xjrsoft.module.organization.service.IUserRoleRelationService;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.service.IUserStudentService;
 import com.xjrsoft.module.organization.utils.OrganizationUtil;
-import com.xjrsoft.module.organization.vo.*;
+import com.xjrsoft.module.organization.vo.PendingCountDto;
+import com.xjrsoft.module.organization.vo.ResetUserPageVo;
+import com.xjrsoft.module.organization.vo.ResetUserRoleVo;
+import com.xjrsoft.module.organization.vo.UserDeptVo;
+import com.xjrsoft.module.organization.vo.UserInfoVo;
+import com.xjrsoft.module.organization.vo.UserListVo;
+import com.xjrsoft.module.organization.vo.UserPageVo;
+import com.xjrsoft.module.organization.vo.UserPostVo;
+import com.xjrsoft.module.organization.vo.UserRoleVo;
+import com.xjrsoft.module.organization.vo.UserStudentVo;
+import com.xjrsoft.module.organization.vo.UserVo;
 import com.xjrsoft.module.oss.factory.OssFactory;
-import com.xjrsoft.module.system.entity.DictionaryDetail;
 import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
@@ -244,7 +284,6 @@ public class UserController {
 
         }
 
-
         if (deptIds.size() > 0) {
             List<Department> list = departmentService.list(Wrappers.lambdaQuery(Department.class).in(Department::getId, deptIds));
 
@@ -286,6 +325,38 @@ public class UserController {
         return RT.ok(pendingCountDto);
     }
 
+    @GetMapping(value = "/reset-user-page")
+    @ApiOperation(value = "移动端用户列表")
+    public RT<PageOutput<ResetUserPageVo>> resetUserPage(UserPageDto dto) {
+        PageOutput<ResetUserPageVo> userPage = userService.getResetUserPage(dto);
+
+        return RT.ok(userPage);
+    }
+
+    @GetMapping(value = "/reset-page-role-list")
+    @ApiOperation(value = "移动端用户列表分类")
+    public RT<List<ResetUserRoleVo>> resetUserTree() {
+        List<ResetUserRoleVo> roleList =  new ArrayList<>();
+        roleList.add(new ResetUserRoleVo(){{
+            setId(null);
+            setName("全部");
+        }});
+        roleList.add(new ResetUserRoleVo(){{
+            setId(2L);
+            setName("教师");
+        }});
+        roleList.add(new ResetUserRoleVo(){{
+            setId(3L);
+            setName("学生");
+        }});
+        roleList.add(new ResetUserRoleVo(){{
+            setId(4L);
+            setName("家长");
+        }});
+
+        return RT.ok(roleList);
+    }
+
     @PutMapping("/update/info")
     @ApiOperation(value = "登陆人修改自己得用户信息")
     public R updateInfo(@RequestBody @Valid UpdateInfoDto dto) {
@@ -398,6 +469,12 @@ public class UserController {
         return RT.ok(userService.resetPassword(dto));
     }
 
+    @PutMapping("/batch-reset-password")
+    @ApiOperation(value = "批量重置密码")
+    public RT<Boolean> batchResetPassword(@RequestBody List<Long> ids) {
+        return RT.ok(userService.batchResetPassword(ids));
+    }
+
     @PostMapping("/bind-unionid")
     @ApiOperation(value = "绑定微信 UnionId")
     public R bindUnionId(@RequestBody BindOpenidDto dto) {

+ 3 - 0
src/main/java/com/xjrsoft/module/organization/dto/UserPageDto.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.organization.dto;
 
 import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.hibernate.validator.constraints.Length;
@@ -30,4 +31,6 @@ public class UserPageDto extends PageInput {
     private String mobile;
 
     private Integer userType;
+    @ApiModelProperty("角色id")
+    private Long roleId;
 }

+ 4 - 1
src/main/java/com/xjrsoft/module/organization/mapper/UserMapper.java

@@ -1,7 +1,10 @@
 package com.xjrsoft.module.organization.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.organization.dto.UserPageDto;
 import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import org.apache.ibatis.annotations.Mapper;
 /**
  * <p>
@@ -13,5 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface UserMapper extends MPJBaseMapper<User> {
-
+    Page<ResetUserPageVo> getResetUserPage(Page<ResetUserPageVo> page, UserPageDto dto);
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/organization/service/IUserService.java

@@ -7,8 +7,10 @@ import com.xjrsoft.module.organization.dto.BindOpenidDto;
 import com.xjrsoft.module.organization.dto.ResetPasswordDto;
 import com.xjrsoft.module.organization.dto.UpdatePasswordDto;
 import com.xjrsoft.module.organization.dto.UpdateUserDto;
+import com.xjrsoft.module.organization.dto.UserPageDto;
 import com.xjrsoft.module.organization.dto.WeChatPageDto;
 import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import com.xjrsoft.module.organization.vo.UserInfoVo;
 import com.xjrsoft.module.organization.vo.WeChatPageVO;
 
@@ -44,6 +46,8 @@ public interface IUserService extends MPJBaseService<User> {
      */
     boolean resetPassword(ResetPasswordDto dto);
 
+    boolean batchResetPassword(List<Long> ids);
+
     /**
      * 绑定微信 Openid
      * @param dto
@@ -71,4 +75,6 @@ public interface IUserService extends MPJBaseService<User> {
      * @return
      */
     PageOutput<WeChatPageVO> getPage(WeChatPageDto dto);
+
+    PageOutput<ResetUserPageVo> getResetUserPage(UserPageDto dto);
 }

+ 34 - 1
src/main/java/com/xjrsoft/module/organization/service/impl/UserServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.common.constant.GlobalConstant;
@@ -19,7 +20,13 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
-import com.xjrsoft.module.organization.dto.*;
+import com.xjrsoft.module.organization.dto.AddUserDto;
+import com.xjrsoft.module.organization.dto.BindOpenidDto;
+import com.xjrsoft.module.organization.dto.ResetPasswordDto;
+import com.xjrsoft.module.organization.dto.UpdatePasswordDto;
+import com.xjrsoft.module.organization.dto.UpdateUserDto;
+import com.xjrsoft.module.organization.dto.UserPageDto;
+import com.xjrsoft.module.organization.dto.WeChatPageDto;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.entity.UserDeptRelation;
 import com.xjrsoft.module.organization.entity.UserPostRelation;
@@ -30,6 +37,7 @@ import com.xjrsoft.module.organization.mapper.UserPostRelationMapper;
 import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
 import com.xjrsoft.module.organization.service.IUserDeptRelationService;
 import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.organization.vo.ResetUserPageVo;
 import com.xjrsoft.module.organization.vo.UserInfoVo;
 import com.xjrsoft.module.organization.vo.WeChatPageVO;
 import lombok.AllArgsConstructor;
@@ -234,6 +242,24 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
         return updateById(user);
     }
 
+    @Override
+    public boolean batchResetPassword(List<Long> ids) {
+        for (Long id : ids) {
+            User user = new User();
+            user.setId(id);
+            user.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
+            user.setIsChangePassword(1);
+
+            CompletableFuture.runAsync(() -> {
+                List<User> list = list();
+                redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
+            });
+            updateById(user);
+        }
+
+        return true;
+    }
+
     @Override
     public boolean bindOpenid(BindOpenidDto dto) {
         User user = this.getOne(Wrappers.<User>query().lambda().select(User::getId, User::getOpenId, User::getUnionId).eq(User::getId, dto.getId()), false);
@@ -313,4 +339,11 @@ public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implem
         return ConventPage.getPageOutput(page, WeChatPageVO.class);
 
     }
+
+    @Override
+    public PageOutput<ResetUserPageVo> getResetUserPage(UserPageDto dto){
+        Page<ResetUserPageVo> resetUserPage = userMapper.getResetUserPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<ResetUserPageVo> pageOutput = ConventPage.getPageOutput(resetUserPage, ResetUserPageVo.class);
+        return pageOutput;
+    }
 }

+ 56 - 0
src/main/java/com/xjrsoft/module/organization/vo/ResetUserPageVo.java

@@ -0,0 +1,56 @@
+package com.xjrsoft.module.organization.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @title: 移动端重置密码用户列表
+ * @Author dzx
+ * @Date: 2024年4月11日
+ * @Version 1.0
+ */
+@Data
+public class ResetUserPageVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+    /**
+     * 账户
+     */
+    @ApiModelProperty("账户")
+    private String userName;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty("姓名")
+    private String name;
+
+    /**
+     * 性别中文
+     */
+    @ApiModelProperty("性别中文")
+    private String genderCn;
+
+    /**
+     * 手机号
+     */
+    @ApiModelProperty("头像")
+    private String mobile;
+
+
+    /**
+     * 头像
+     */
+    @ApiModelProperty("头像")
+    private String avatar;
+
+
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/organization/vo/ResetUserRoleVo.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.organization.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @title: 移动端重置密码用户列表
+ * @Author dzx
+ * @Date: 2024年4月11日
+ * @Version 1.0
+ */
+@Data
+public class ResetUserRoleVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty("主键")
+    private Long id;
+    /**
+     * 账户
+     */
+    @ApiModelProperty("名称")
+    private String name;
+
+
+
+}

+ 1 - 0
src/main/java/com/xjrsoft/module/workflow/dto/MyProcessPageDto.java

@@ -53,4 +53,5 @@ public class MyProcessPageDto extends PageInput {
      */
     @ApiModelProperty("类型 1完成 2未完成 ")
     private Integer type;
+
 }

+ 4 - 3
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -608,6 +608,9 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                 if (!taskNodeConfigMap.isPresent()) {
                     throw new MyException("找不到当前节点的配置信息!");
                 }
+                if(taskNodeConfigMap.get().get("styleType") != null){
+                    vo.setStyleType(Integer.parseInt(taskNodeConfigMap.get().get("styleType").toString()));
+                }
 
                 UserTaskConfig userTaskConfig = Convert.convert(UserTaskConfig.class, taskNodeConfigMap.get());
 
@@ -3363,8 +3366,7 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
 
 
             for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
-
-                //找到当前流程的 任务开始时间 最大值  为当前审批节点
+                //找到当前流程的 任务开始时间 最大值 为当前审批节点
                 workflowExtras.stream()
                         .filter(e -> e.getProcessId().equals(historicProcessInstance.getId()))
                         .max(Comparator.comparing(WorkflowExtra::getStartTime))
@@ -3375,7 +3377,6 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                             vo.setSchemaName(e.getSchemaName());
                             vo.setOriginator(e.getStartUserName());
                             vo.setSchemaId(e.getSchemaId());
-
                             vo.setTaskName(e.getTaskName());
                             vo.setCurrentTaskName(e.getTaskName());
                             vo.setTaskId(e.getTaskId());

+ 1 - 0
src/main/java/com/xjrsoft/module/workflow/vo/MyProcessPageVo.java

@@ -72,4 +72,5 @@ public class MyProcessPageVo {
 
     @ApiModelProperty("是否已审批(0:否 1:是)")
     private Integer isApproval;
+
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/workflow/vo/UserTaskInfoVo.java

@@ -74,4 +74,5 @@ public class UserTaskInfoVo {
 
     @ApiModelProperty("样式(0:表单 1:表格)")
     private Integer styleType = 0;
+
 }

+ 18 - 0
src/main/resources/mapper/organization/UserMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.organization.mapper.UserMapper">
+    <select id="getResetUserPage" parameterType="com.xjrsoft.module.organization.dto.UserPageDto" resultType="com.xjrsoft.module.organization.vo.ResetUserPageVo">
+        SELECT DISTINCT t1.*,t3.name AS gender_cn FROM xjr_user t1
+        INNER JOIN xjr_user_role_relation t2 ON t2.user_id = t1.id
+        LEFT JOIN xjr_dictionary_detail t3 ON t1.gender = t3.code
+        WHERE t1.delete_mark = 0
+        <if test="dto.keyword != null and dto.keyword !=''">
+            and (t1.name like concat('%', #{dto.keyword}, '%') or t1.mobile like concat('%', #{dto.keyword}, '%'))
+        </if>
+        <if test="dto.roleId != null">
+            and t2.role_id = #{dto.roleId}
+        </if>
+    </select>
+</mapper>

+ 10 - 5
src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml

@@ -32,14 +32,15 @@
             t13.name AS roll_modality,
             t11.name AS student_form,
             MAX(CASE WHEN t10.feeitemcode LIKE '999010604%' THEN t10.jfzt ELSE NULL END) AS jxf,
-            MAX(CASE WHEN t10.feeitemcode = 103042766003001 AND LEFT(t10.beltcode, 4) = DATE_FORMAT(CURRENT_DATE, '%Y') THEN t10.jfzt ELSE NULL END) AS ssf,
+            MAX(CASE WHEN t10.feeitemcode = 103042766003001 AND t10.beltcode LIKE '%2024%' THEN t10.jfzt ELSE NULL END) AS ssf,
             MAX(CASE WHEN t10.feeitemcode LIKE '999010603%' THEN t10.jfzt ELSE NULL END) AS jcf,
+        CONCAT(t16.name, ' ', t15.room_name, ' ', t14.bed_number) AS bed_info
         FROM base_student t1
         INNER JOIN xjr_user t2 ON t1.user_id = t2.id
         INNER JOIN base_student_school_roll t3 ON t1.user_id = t3.user_id
         LEFT JOIN base_class t4 ON t3.class_id = t4.id
         LEFT JOIN xjr_user t5 ON t4.teacher_id = t5.id
-        LEFT JOIN base_student_family_member t6 ON t6.user_id = t2.id AND t6.delete_mark = 0 AND t6.is_guardian = 1
+        LEFT JOIN xjr_dictionary_detail t6 ON t6.code = t1.nation
         LEFT JOIN xjr_dictionary_detail t7 ON t7.code = t2.gender
         LEFT JOIN xjr_dictionary_detail t8 ON t8.code = t3.stduy_status
         LEFT JOIN xjr_dictionary_detail t11 ON t11.code = t3.student_type
@@ -47,6 +48,9 @@
         LEFT JOIN xjr_dictionary_detail t13 ON t13.code = t3.roll_modality
         LEFT JOIN pb_v_xssfdetail t9 ON t9.personalid = t1.student_id
         LEFT JOIN pb_v_xsxxsfytb t10 ON t10.Studentcode = t9.personalid
+        LEFT JOIN room_bed t14 ON t14.student_user_id = t2.id
+        LEFT JOIN room t15 ON t14.room_id = t15.id
+        LEFT JOIN base_office_build t16 ON t15.office_build_id = t16.id
         WHERE t2.delete_mark = 0
         AND t1.delete_mark = 0
         AND t3.archives_status = 'FB2901'
@@ -74,8 +78,9 @@
         GROUP BY t2.id, t2.name, t1.student_id, t2.mobile, t5.mobile, t5.name, t4.name,
         (SELECT mobile FROM base_student_family_member WHERE delete_mark = 0 AND user_id = t2.id AND is_guardian = 1),
         t7.name, t8.name, t2.gender, t10.sex, t2.birth_date, t2.avatar, t6.name,
-        t12.name, t13.name, t11.name,t3.stduy_status,t3.archives_status,t3.roll_modality,CONCAT(t17.name, ' ', t16.room_name, ' ', t15.bed_number)
+        t12.name, t13.name, t11.name,t3.stduy_status,t3.archives_status,t3.roll_modality,CONCAT(t16.name, ' ', t15.room_name, ' ', t14.bed_number)
     </select>
+
     <select id="getInfoById" resultType="com.xjrsoft.module.student.vo.BaseStudentInfoDetailVo">
         SELECT t2.id,
                t2.name                                                                                                       AS student_name,
@@ -104,7 +109,7 @@
                t3.roll_modality                                                                                              as rollModalityCode,
                 t12.name AS student_form,
                MAX(CASE WHEN t14.feeitemcode LIKE '999010604%' THEN t14.jfzt ELSE NULL END) AS jxf,
-               MAX(CASE WHEN t14.feeitemcode = 103042766003001 AND LEFT(t14.beltcode, 4) = DATE_FORMAT(CURRENT_DATE, '%Y') THEN t14.jfzt ELSE NULL END) AS ssf,
+               MAX(CASE WHEN t14.feeitemcode = 103042766003001 AND t14.beltcode LIKE '%2024%' THEN t14.jfzt ELSE NULL END) AS ssf,
                MAX(CASE WHEN t14.feeitemcode LIKE '999010603%' THEN t14.jfzt ELSE NULL END) AS jcf
         FROM base_student t1
                  INNER JOIN xjr_user t2 ON t1.user_id = t2.id
@@ -124,7 +129,7 @@
         GROUP BY t2.id, t2.name, t2.mobile, t2.gender, t11.name, t1.student_id, t5.name, t5.mobile, t4.name,
                  (SELECT mobile FROM base_student_family_member WHERE delete_mark = 0 AND user_id = t2.id AND is_guardian = 1),
                  t8.name, t7.name, t9.name, t2.birth_date, t2.avatar, t6.name, t10.name, t3.archives_status, t3.stduy_status,
-                 t3.roll_modality, t3.archives_status, t3.stduy_status, t3.roll_modality, t12.name, CONCAT(t17.name, ' ', t16.room_name, ' ', t15.bed_number)
+                 t3.roll_modality, t3.archives_status, t3.stduy_status, t3.roll_modality, t12.name
     </select>
     <update id="updateInfoByUserId" parameterType="com.xjrsoft.module.student.dto.UpdateBaseStudentInfoDto">
         UPDATE base_student_school_roll SET delete_mark = delete_mark