Jelajahi Sumber

Merge branch 'pre'

dzx 1 tahun lalu
induk
melakukan
029aa8304b
23 mengubah file dengan 295 tambahan dan 14 penghapusan
  1. 1 1
      src/main/java/com/xjrsoft/module/activity/controller/ActivityInfoController.java
  2. 2 0
      src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java
  3. 1 1
      src/main/java/com/xjrsoft/module/attendance/controller/TeacherStatisticsController.java
  4. 27 1
      src/main/java/com/xjrsoft/module/base/controller/BaseClassController.java
  5. 21 0
      src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java
  6. 2 0
      src/main/java/com/xjrsoft/module/base/dto/AddBaseClassPageDto.java
  7. 3 0
      src/main/java/com/xjrsoft/module/base/entity/BaseClass.java
  8. 1 1
      src/main/java/com/xjrsoft/module/base/entity/BaseUserStudent.java
  9. 2 0
      src/main/java/com/xjrsoft/module/base/service/IWhitelistManagementService.java
  10. 185 0
      src/main/java/com/xjrsoft/module/base/service/impl/WhitelistManagementServiceImpl.java
  11. 5 0
      src/main/java/com/xjrsoft/module/base/vo/BaseClassPageVo.java
  12. 3 0
      src/main/java/com/xjrsoft/module/base/vo/BaseClassVo.java
  13. 7 1
      src/main/java/com/xjrsoft/module/organization/controller/UserController.java
  14. 1 0
      src/main/java/com/xjrsoft/module/organization/dto/UserStudentBindDto.java
  15. 4 2
      src/main/java/com/xjrsoft/module/organization/service/impl/UserStudentServiceImpl.java
  16. 1 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java
  17. 3 0
      src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java
  18. 14 1
      src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java
  19. 1 1
      src/main/java/com/xjrsoft/module/textbook/dto/WfTextbookSubscriptionDto.java
  20. 1 1
      src/main/resources/application.yml
  21. 3 1
      src/main/resources/mapper/base/BaseClass.xml
  22. 1 1
      src/main/resources/mapper/student/BaseStudentAssessmentInspectionMapper.xml
  23. 6 2
      src/main/resources/mapper/textbook/TextbookWarehouseRecordMapper.xml

+ 1 - 1
src/main/java/com/xjrsoft/module/activity/controller/ActivityInfoController.java

@@ -158,7 +158,7 @@ public class ActivityInfoController {
             Set<ActivityEnrollPageVo> suretSet = enrollList.stream().filter(x -> (x.getStatus() == 2)).collect(Collectors.toSet());
             infoVo.setSureCount(suretSet.size());
 
-            Set<ActivityEnrollPageVo> notSuretSet = enrollList.stream().filter(x -> x.getStatus() == 1).collect(Collectors.toSet());
+            Set<ActivityEnrollPageVo> notSuretSet = enrollList.stream().filter(x -> (x.getStatus() == 1 || x.getStatus() == 0)).collect(Collectors.toSet());
             infoVo.setNotSureCount(notSuretSet.size());
         }else if(category == 3){
             String tableName = "club_activities";

+ 2 - 0
src/main/java/com/xjrsoft/module/attendance/controller/StatisticsController.java

@@ -116,7 +116,9 @@ public class StatisticsController {
             long count = carMessageApplyService.count(
                     new MPJLambdaWrapper<CarMessageApply>()
                             .innerJoin(CarOutInRecord.class, CarOutInRecord::getCarMessageApplyId, CarMessageApply::getId)
+                            .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, CarMessageApply::getUserId)
                             .le(CarOutInRecord::getRecordTime, endTime)
+                            .eq(dto.getDeptId() != null, UserDeptRelation::getDeptId, dto.getDeptId())
                             .eq("DATE_FORMAT(record_time, '%Y-%m-%d')", endTime.toLocalDate())
                             .ge(dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
                             .eq(CarOutInRecord::getStatus, OutInStatusEnum.enter.getCode())

+ 1 - 1
src/main/java/com/xjrsoft/module/attendance/controller/TeacherStatisticsController.java

@@ -199,7 +199,7 @@ public class TeacherStatisticsController {
                                     .le(CarOutInRecord::getRecordTime, endTime)
                                     .eq("DATE_FORMAT(record_time, '%Y-%m-%d')", endTime.toLocalDate())
                                     .eq(CarMessageApply::getUserId, record.getUserId())
-                                    .ge(dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
+                                    .ge(dto.getTimePeriod() != null && dto.getTimePeriod() == 2 && amEndTime != null, CarOutInRecord::getRecordTime, amEndTime)
                                     .eq(CarOutInRecord::getStatus, OutInStatusEnum.enter.getCode())
                                     .orderByAsc(CarOutInRecord::getRecordTime)
                     );

+ 27 - 1
src/main/java/com/xjrsoft/module/base/controller/BaseClassController.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.base.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
@@ -16,6 +17,8 @@ import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.service.IBaseClassService;
 import com.xjrsoft.module.base.vo.BaseClassPageVo;
 import com.xjrsoft.module.base.vo.BaseClassVo;
+import com.xjrsoft.module.student.entity.BaseClassMajorSet;
+import com.xjrsoft.module.student.service.IBaseClassMajorSetService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -44,6 +47,7 @@ import java.util.List;
 @AllArgsConstructor
 public class BaseClassController {
     private final IBaseClassService baseClassService;
+    private final IBaseClassMajorSetService majorSetService;
 
     @GetMapping(value = "/page")
     @ApiOperation(value="班级列表(分页)")
@@ -83,6 +87,14 @@ public class BaseClassController {
         baseClass.setEnabledMark(EnabledMark.ENABLED.getCode());
         baseClass.setCreateUserId(StpUtil.getLoginIdAsLong());
         boolean isSuccess = baseClassService.save(baseClass);
+
+        if(isSuccess){
+            BaseClassMajorSet majorSet = new BaseClassMajorSet();
+            majorSet.setClassId(baseClass.getId());
+            majorSet.setMajorSetId(dto.getMajorSetId());
+            majorSet.setCreateDate(new Date());
+            majorSetService.save(majorSet);
+        }
         return RT.ok(isSuccess);
     }
 
@@ -94,6 +106,20 @@ public class BaseClassController {
         BaseClass baseClass = BeanUtil.toBean(dto, BaseClass.class);
         baseClass.setModifyDate(new Date());
         baseClass.setModifyUserId(StpUtil.getLoginIdAsLong());
-        return RT.ok(baseClassService.updateById(baseClass));
+        boolean update = baseClassService.updateById(baseClass);
+        if(update){
+            BaseClassMajorSet majorSet = majorSetService.getOne(
+                    new QueryWrapper<BaseClassMajorSet>().lambda()
+                            .eq(BaseClassMajorSet::getClassId, baseClass.getId())
+            );
+            if(majorSet != null){
+                majorSet.setClassId(baseClass.getId());
+                majorSet.setMajorSetId(dto.getMajorSetId());
+                majorSet.setModifyDate(new Date());
+                majorSetService.updateById(majorSet);
+            }
+        }
+
+        return RT.ok(update);
     }
 }

+ 21 - 0
src/main/java/com/xjrsoft/module/base/controller/WhitelistManagementController.java

@@ -34,6 +34,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -151,4 +152,24 @@ public class WhitelistManagementController {
         return RT.ok(result);
     }
 
+    @PostMapping("/activate-import")
+    @ApiOperation(value = "新生账号激活导入")
+    public RT<List<Map<String, String>>> activateImport(@RequestParam MultipartFile file) throws IOException {
+        List<Map<Integer, Object>> excelDataList = EasyExcel.read(file.getInputStream()).sheet().headRowNumber(2).doReadSync();
+        List<Map<Integer, Object>> errorList = whitelistManagementService.activateImport(excelDataList);
+        List<Map<String, String>> result = new ArrayList<>();
+
+        for (Map<Integer, Object> objectMap : errorList) {
+            Map<String, String> object = new LinkedHashMap<>();
+            object.put("学生姓名", objectMap.get(0)==null?"":objectMap.get(0).toString());
+            object.put("学生身份证", objectMap.get(1)==null?"":objectMap.get(1).toString());
+            object.put("智慧校园卡号", objectMap.get(2)==null?"":objectMap.get(2).toString());
+            object.put("家长姓名", objectMap.get(3)==null?"":objectMap.get(3).toString());
+            object.put("家长手机号", objectMap.get(4)==null?"":objectMap.get(4).toString());
+            object.put("错误信息", objectMap.get(5)==null?"":objectMap.get(5).toString());
+            result.add(object);
+        }
+        return RT.ok(result);
+    }
+
 }

+ 2 - 0
src/main/java/com/xjrsoft/module/base/dto/AddBaseClassPageDto.java

@@ -43,4 +43,6 @@ public class AddBaseClassPageDto implements Serializable {
     @ApiModelProperty("班级类型(xjr_dictionary_item[class_type])")
     private String classType;
 
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/base/entity/BaseClass.java

@@ -73,4 +73,7 @@ public class BaseClass implements Serializable {
 
     @ApiModelProperty("班级类型(xjr_dictionary_item[class_type])")
     private String classType;
+
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/base/entity/BaseUserStudent.java

@@ -49,7 +49,7 @@ public class BaseUserStudent implements Serializable {
     private Long classId;
 
     @ApiModelProperty("学生班主任id(xjr_user)")
-    private Long teacher_id;
+    private Long teacherId;
 
     @ApiModelProperty("流程状态(0:审核中,1:通过,2:拒绝)")
     private Integer status;

+ 2 - 0
src/main/java/com/xjrsoft/module/base/service/IWhitelistManagementService.java

@@ -38,4 +38,6 @@ public interface IWhitelistManagementService extends MPJBaseService<WhitelistMan
     void loadCaches();
 
     List<Map<Integer, Object>> importData(List<Map<Integer, Object>> savedDataList);
+
+    List<Map<Integer, Object>> activateImport(List<Map<Integer, Object>> savedDataList);
 }

+ 185 - 0
src/main/java/com/xjrsoft/module/base/service/impl/WhitelistManagementServiceImpl.java

@@ -1,28 +1,49 @@
 package com.xjrsoft.module.base.service.impl;
 
+import cn.dev33.satoken.secure.BCrypt;
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.RedisUtil;
+import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.base.dto.WhitelistManagementPageDto;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseUserStudent;
 import com.xjrsoft.module.base.entity.TreeNode;
 import com.xjrsoft.module.base.entity.WhiteBaseClass;
 import com.xjrsoft.module.base.entity.WhiteBaseGrade;
 import com.xjrsoft.module.base.entity.WhitelistManagement;
 import com.xjrsoft.module.base.mapper.WhitelistManagementMapper;
+import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.base.service.IBaseUserStudentService;
 import com.xjrsoft.module.base.service.IWhitelistManagementService;
 import com.xjrsoft.module.base.vo.WhitelistManagementPageVo;
+import com.xjrsoft.module.organization.entity.User;
+import com.xjrsoft.module.organization.entity.UserRoleRelation;
+import com.xjrsoft.module.organization.service.IUserRoleRelationService;
+import com.xjrsoft.module.organization.service.IUserService;
+import com.xjrsoft.module.student.entity.BaseStudent;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
@@ -40,6 +61,12 @@ public class WhitelistManagementServiceImpl extends MPJBaseServiceImpl<Whitelist
 
     private RedisUtil redisUtil;
 
+    private final IUserService userService;
+    private final IBaseClassService classService;
+    private final IBaseStudentSchoolRollService rollService;
+    private final CommonPropertiesConfig propertiesConfig;
+    private final IBaseUserStudentService userStudentService;
+    private final IUserRoleRelationService roleRelationService;
     @Override
     public Page<WhitelistManagementPageVo> getPage(Page<Object> objectPage, WhitelistManagementPageDto dto) {
         return whitelistManagementMapper.getPage(objectPage, dto);
@@ -156,4 +183,162 @@ public class WhitelistManagementServiceImpl extends MPJBaseServiceImpl<Whitelist
 
         return errorList;
     }
+
+    @Override
+    public List<Map<Integer, Object>> activateImport(List<Map<Integer, Object>> savedDataList) {
+        List<Map<Integer, Object>> errorList = new ArrayList<>();
+
+        List<User> studentList = userService.selectJoinList(User.class,
+                new MPJLambdaWrapper<User>()
+                        .innerJoin(BaseStudent.class, BaseStudent::getUserId, User::getId)
+        );
+        Map<String, User> studentMap = new HashMap<>();
+        for (User user : studentList) {
+            String key = user.getName() + user.getCredentialNumber();
+            studentMap.put(key, user);
+        }
+
+        List<BaseClass> classList = classService.list(new QueryWrapper<BaseClass>());
+        Map<Long, Long> classTeacherMap = new HashMap<>();
+        for (BaseClass baseClass : classList) {
+            classTeacherMap.put(baseClass.getId(), baseClass.getTeacherId());
+        }
+
+        List<BaseStudentSchoolRoll> schoolRollList = rollService.list(new QueryWrapper<BaseStudentSchoolRoll>());
+        Map<Long, Long> studentClassMap = new HashMap<>();
+        for (BaseStudentSchoolRoll el : schoolRollList) {
+            studentClassMap.put(el.getUserId(), el.getClassId());
+        }
+
+        List<User> parents = userService.list(
+                new QueryWrapper<User>().lambda()
+                        .notIn(User::getId, "SELECT user_id FROM base_student")
+        );
+        Map<String, User> parentsMap = new HashMap<>();
+        for (User parent : parents) {
+            parentsMap.put(parent.getMobile(), parent);
+        }
+
+        Set<Long> whitelistUsers = this.baseMapper.selectList(new QueryWrapper<>()).stream().map(WhitelistManagement::getUserId).collect(Collectors.toSet());
+
+        List<User> updateList = new ArrayList<>();
+        List<BaseUserStudent> userStudentList = new ArrayList<>();
+        List<User> parentInsList = new ArrayList<>();
+        List<User> parentUpdList = new ArrayList<>();
+        List<UserRoleRelation> roleRelationList = new ArrayList<>();
+        List<WhitelistManagement> whitelist = new ArrayList();
+        LocalDateTime now = LocalDateTime.now();
+        Date createDate = new Date();
+        for (Map<Integer, Object> vo : savedDataList) {
+            List<String> errorLogs = new ArrayList<>();
+
+            if(vo.get(0) == null || "".equals(vo.get(0).toString())){
+                errorLogs.add("学生姓名为空");
+            }
+            if(vo.get(1) == null || "".equals(vo.get(1).toString())){
+                errorLogs.add("学生身份证为空");
+            }
+            if(vo.get(2) == null || "".equals(vo.get(2).toString())){
+                errorLogs.add("智慧校园卡号为空");
+            }
+            if(vo.get(3) == null || "".equals(vo.get(3).toString())){
+                errorLogs.add("家长姓名为空");
+            }
+            if(vo.get(4) == null || "".equals(vo.get(4).toString())){
+                errorLogs.add("家长手机号为空");
+            }
+            String studentKey = vo.get(0).toString() + vo.get(1).toString();
+            if(!studentMap.containsKey(studentKey)){
+                errorLogs.add("未能查询到该学生");
+            }
+            if(!errorLogs.isEmpty()){
+                vo.put(5, errorLogs.toString().replace("[", "").replace("]", ""));
+                continue;
+            }
+            long parentId = IdUtil.getSnowflakeNextId();
+            if(parentsMap.get(vo.get(4).toString()) != null){
+                User parent = parentsMap.get(vo.get(4).toString());
+                parentId = parent.getId();
+                parent.setName(vo.get(3).toString());
+                parent.setModifyDate(now);
+                parentUpdList.add(parent);
+            }else{
+                User parent = new User();
+                parent.setId(parentId);
+                parent.setPassword(BCrypt.hashpw(propertiesConfig.getDefaultPassword(), BCrypt.gensalt()));
+                parent.setCreateDate(now);
+                parent.setMobile(vo.get(4).toString());
+                parent.setName(vo.get(3).toString());
+                parent.setUserName(vo.get(4).toString());
+                parent.setIsChangePassword(1);
+                parentInsList.add(parent);
+
+                UserRoleRelation roleRelation = new UserRoleRelation();
+                roleRelation.setRoleId(RoleEnum.PARENT.getCode());
+                roleRelation.setUserId(parentId);
+                roleRelationList.add(roleRelation);
+            }
+
+            User user = studentMap.get(studentKey);
+            user.setMobile(vo.get(2).toString());
+            user.setEnabledMark(EnabledMark.ENABLED.getCode());
+            updateList.add(user);
+            Long classId = studentClassMap.get(user.getId());
+            Long teacherId = classTeacherMap.get(classId);
+
+            BaseUserStudent userStudent = new BaseUserStudent();
+            userStudent.setStatus(1);
+            userStudent.setStudentId(user.getId());
+            userStudent.setStudentIdentity(user.getCredentialNumber());
+            userStudent.setStudentNane(user.getName());
+            userStudent.setCreateDate(new Date());
+            userStudent.setClassId(classId);
+            userStudent.setTeacherId(teacherId);
+            userStudent.setUserId(parentId);
+            userStudent.setUserPhone(vo.get(4).toString());
+            userStudentList.add(userStudent);
+
+
+            if(!whitelistUsers.contains(user.getId())){
+                whitelist.add(new WhitelistManagement(){{
+                    setCredentialNumber(user.getCredentialNumber());
+                    setUserId(user.getId());
+                    setName(user.getName());
+                    setPhone(user.getMobile());
+                    setCreateDate(createDate);
+                }});
+            }
+        }
+
+        if(!updateList.isEmpty()){
+            userService.updateBatchById(updateList);
+        }
+        if(!userStudentList.isEmpty()){
+            userStudentService.updateBatchById(userStudentList);
+        }
+        if(!parentInsList.isEmpty()){
+            userService.saveBatch(parentInsList);
+        }
+        if(!parentUpdList.isEmpty()){
+            userService.updateBatchById(parentUpdList);
+        }
+        if(!roleRelationList.isEmpty()){
+            roleRelationService.saveBatch(roleRelationList);
+        }
+        if(!whitelist.isEmpty()){
+            this.saveBatch(whitelist);
+        }
+
+        CompletableFuture.runAsync(() -> {
+            List<User> list = userService.list();
+            redisUtil.set(GlobalConstant.USER_CACHE_KEY, list);
+
+            List<UserRoleRelation> userRoleRelationList = roleRelationService.list(Wrappers.lambdaQuery(UserRoleRelation.class));
+            redisUtil.set(GlobalConstant.USER_ROLE_RELATION_CACHE_KEY, userRoleRelationList);
+
+            this.loadCaches();
+        });
+
+        return errorList;
+    }
 }

+ 5 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassPageVo.java

@@ -52,4 +52,9 @@ public class BaseClassPageVo {
     @ApiModelProperty("机构名称")
     private String orgName;
 
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
+
+    @ApiModelProperty("专业方向名称")
+    private String majorSetName;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseClassVo.java

@@ -68,4 +68,7 @@ public class BaseClassVo {
     @ApiModelProperty("班级类型(xjr_dictionary_item[class_type])")
     private String classType;
 
+    @ApiModelProperty("专业方向id(base_major_set)")
+    private Long majorSetId;
+
 }

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

@@ -723,7 +723,10 @@ public class UserController {
     public R bindStudent(@Valid @RequestBody UserStudentBindDto dto) {
         User user = userService.getOne(Wrappers.<User>query().lambda()
                 .eq(User::getName, dto.getName())
-                .eq(User::getCredentialNumber, dto.getIdCard()));
+                .eq(User::getCredentialNumber, dto.getIdCard())
+                .eq(User::getMobile, dto.getMobile())
+        );
+
         UserStudentAddDto userStudentAddDto = new UserStudentAddDto();
         if (user == null) {
             return R.error("学生不存在!");
@@ -749,6 +752,9 @@ public class UserController {
         if (userStudentInfoVo == null) {
             return RT.error("学生不存在!");
         }
+        if(!dto.getMobile().equals(userStudentInfoVo.getMobile())){
+            return RT.error("该学生的手机号和当前输入的手机号不一致!");
+        }
 
         List<WhitelistManagement> managementList = whitelistManagementService.list(
                 new QueryWrapper<WhitelistManagement>().lambda()

+ 1 - 0
src/main/java/com/xjrsoft/module/organization/dto/UserStudentBindDto.java

@@ -7,4 +7,5 @@ public class UserStudentBindDto {
     private Long userId;
     private String name;
     private String idCard;
+    private String mobile;
 }

+ 4 - 2
src/main/java/com/xjrsoft/module/organization/service/impl/UserStudentServiceImpl.java

@@ -6,6 +6,7 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.organization.dto.UserStudentAddDto;
 import com.xjrsoft.module.organization.dto.UserStudentDeleteDto;
+import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.entity.UserStudent;
 import com.xjrsoft.module.organization.mapper.UserStudentMapper;
 import com.xjrsoft.module.organization.service.IUserStudentService;
@@ -23,9 +24,10 @@ public class UserStudentServiceImpl extends MPJBaseServiceImpl<UserStudentMapper
     public boolean add(UserStudentAddDto dto) {
         long count = count(Wrappers.<UserStudent>query().lambda()
                 .eq(UserStudent::getUserId, dto.getUserId())
-                .eq(UserStudent::getStudentId, dto.getStudentId()));
+                .eq(UserStudent::getStudentId, dto.getStudentId())
+        );
         if (count > 0) {
-            throw new MyException("已经绑定了学生,不能出重复绑定");
+            throw new MyException("已经绑定了学生,不能出重复绑定");
         }
         UserStudent userStudent = BeanUtil.toBean(dto, UserStudent.class);
         userStudentMapper.insert(userStudent);

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

@@ -291,6 +291,7 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
                         }
 
                         if(conventionalManagementMap.get(classId) != null){
+                            QuantitativeAssessmentSingleScoreVo scoreVo = conventionalManagementMap.get(classId);
                             c.setClassConventionalManageSubScore(conventionalManagementMap.get(classId).getSumScore());
                             c.setClassConventionalManageScore((100 + conventionalManagementMap.get(classId).getSumScore())/100*25);
                         }

+ 3 - 0
src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java

@@ -314,6 +314,9 @@ public class PbVXsxxsfytbServiceImpl extends MPJBaseServiceImpl<PbVXsxxsfytbMapp
         Integer allCount = (result.getStayCount() == null?0:result.getStayCount())
                 + (result.getNotStayCount() == null?0:result.getNotStayCount());
         BigDecimal divide = BigDecimal.ZERO;
+        if(result.getStayCount() == null){
+            result.setStayCount(0);
+        }
         if(allCount != 0){
             divide = BigDecimal.valueOf(result.getStayCount()).divide(BigDecimal.valueOf(allCount), 4, RoundingMode.HALF_UP);
         }

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

@@ -11,11 +11,13 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.xjrsoft.common.constant.GlobalConstant;
 import com.xjrsoft.common.enums.AuthorizeType;
+import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.RoleEnum;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.WhitelistManagement;
 import com.xjrsoft.module.base.service.IWhitelistManagementService;
+import com.xjrsoft.module.organization.entity.Department;
 import com.xjrsoft.module.organization.entity.UserRoleRelation;
 import com.xjrsoft.module.organization.mapper.UserRoleRelationMapper;
 import com.xjrsoft.module.system.dto.MenuTreeDto;
@@ -23,6 +25,7 @@ import com.xjrsoft.module.system.dto.RoleMenuServeListDto;
 import com.xjrsoft.module.system.entity.Authorize;
 import com.xjrsoft.module.system.entity.Menu;
 import com.xjrsoft.module.system.entity.Subsystem;
+import com.xjrsoft.module.system.entity.XjrMenuDeptRelation;
 import com.xjrsoft.module.system.entity.XjrMenuGroup;
 import com.xjrsoft.module.system.entity.XjrMenuGroupSet;
 import com.xjrsoft.module.system.entity.XjrMenuQuick;
@@ -216,18 +219,24 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
         List<String> orderList = new ArrayList<>();
         orderList.add("t1.sort_code");orderList.add("t.sort_code");
         List<MenuVo> menuVos = this.selectJoinList(MenuVo.class,
-            MPJWrappers.<Menu>lambdaJoin()
+            MPJWrappers.<Menu>lambdaJoin().disableSubLogicDel()
             .like(StrUtil.isNotBlank(dto.getTitle()), Menu::getTitle, dto.getTitle())
             .like(StrUtil.isNotBlank(dto.getCode()), Menu::getCode, dto.getCode())
             .like(StrUtil.isNotBlank(dto.getName()), Menu::getName, dto.getName())
             .eq(ObjectUtil.isNotEmpty(dto.getSystemType()), Menu::getSystemType, dto.getSystemType())
             .eq(ObjectUtil.isNotEmpty(dto.getDisplay()), Menu::getDisplay, dto.getDisplay())
+            .eq( Menu::getDeleteMark, DeleteMark.NODELETE.getCode())
+            .eq(Subsystem::getDeleteMark, DeleteMark.NODELETE.getCode())
             .in(CollectionUtils.isNotEmpty(authMenuIdList), Menu::getId, authMenuIdList)
             .select(Menu::getId)
             .select("1 as authorized")
             .selectAs(Subsystem::getName, MenuVo::getSystemName)
+//            .selectAs(Department::getName, MenuVo::getDeptName)
+//            .selectAs(Department::getId, MenuVo::getDeptId)
             .select(Menu.class, x -> VoToColumnUtil.fieldsToColumns(MenuTreeVo.class).contains(x.getProperty()))
             .leftJoin(Subsystem.class, Subsystem::getId, Menu::getSystemId)
+//            .leftJoin("xjr_menu_dept_relation t2 ON t2.menu_id = t.id AND t2.delete_mark = 0")
+//            .leftJoin("xjr_department t3 ON t3.id = t2.dept_id")
             .eq(Menu::getEnabledMark, EnabledMark.ENABLED.getCode())
             .orderByAscStr(orderList)
         );
@@ -283,6 +292,10 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
                 }
             }
         }else{
+            for (MenuVo menuVo : menuVos) {
+                menuVo.setDeptId(deptIdMap.get(menuVo.getId()));
+                menuVo.setDeptName(deptNameMap.get(menuVo.getId()));
+            }
             result.addAll(menuVos);
         }
 

+ 1 - 1
src/main/java/com/xjrsoft/module/textbook/dto/WfTextbookSubscriptionDto.java

@@ -21,7 +21,7 @@ public class WfTextbookSubscriptionDto {
     * 主键编号
     */
     @ApiModelProperty("主键编号")
-    private Long id;
+    private String id;
     /**
      * 主键编号
      */

+ 1 - 1
src/main/resources/application.yml

@@ -82,7 +82,7 @@ sa-token:
   # token名称 (同时也是cookie名称)
   token-name: Authorization
   # token有效期,单位s 默认30天, -1代表永不过期
-  timeout: 2592000
+  timeout: 604800
   # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
   active-timeout: -1
   # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)

+ 3 - 1
src/main/resources/mapper/base/BaseClass.xml

@@ -25,13 +25,15 @@
         LEFT JOIN base_student_school_roll a2 ON a1.id = a2.user_id
         WHERE a1.delete_mark = 0 AND a2.delete_mark = 0
         AND a2.class_id = t1.id AND a2.stduy_status = 'FB3001'
-        AND a2.archives_status = 'FB2901') AS not_stay_count,t7.name AS org_name FROM base_class t1
+        AND a2.archives_status = 'FB2901') AS not_stay_count,t7.name AS org_name,
+        t8.name as major_set_name,t1.major_set_id FROM base_class t1
         LEFT JOIN xjr_user t2 ON t1.teacher_id = t2.id
         LEFT JOIN xjr_dictionary_detail t3 ON t3.code = t1.enroll_type AND t3.item_id = 2023000000000000027
         LEFT JOIN xjr_dictionary_detail t5 ON t5.code = t1.class_type AND t5.item_id = 1784405535724978177
         LEFT JOIN base_grade t4 ON t1.grade_id = t4.id
         LEFT JOIN base_classroom t6 ON t1.classroom_id = t6.id
         LEFT JOIN xjr_department t7 ON t1.org_id = t7.id
+        left join base_major_set t8 on t1.major_set_id = t8.id
         WHERE t1.delete_mark = 0
         <if test="dto.name != null and dto.name != ''">
             and t1.name like concat('%', #{dto.name}, '%')

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

@@ -219,7 +219,7 @@
     <select id="getAssessmentInspectionByClassIdList" parameterType="com.xjrsoft.module.student.dto.QuantitativeAssessmentSingleScoreDto" resultType="com.xjrsoft.module.student.vo.QuantitativeAssessmentSingleScoreVo">
         select
         t.class_ids as class_id,
-        sum(t.score) as sumScore
+        SUM(t.score * (LENGTH(personal_student_user_ids) - LENGTH(REPLACE(personal_student_user_ids, ',', '')) + 1)) AS sumScore
         from base_student_assessment_inspection t
         where t.delete_mark = 0
         <if test="dto.classIdList != null and !dto.classIdList.isEmpty()">

+ 6 - 2
src/main/resources/mapper/textbook/TextbookWarehouseRecordMapper.xml

@@ -24,7 +24,7 @@
         FROM textbook_class_relation c1
         LEFT JOIN base_class c2 ON c1.class_id = c2.id
         WHERE c1.textbook_id = t1.textbook_id) AS use_class,
-        t7.name                        AS use_grade
+        t7.name AS use_grade
         FROM textbook_warehouse_record t1
         LEFT JOIN xjr_user t2 ON t1.create_user_id = t2.id
         LEFT JOIN textbook t3 ON t1.textbook_id = t3.id
@@ -50,7 +50,11 @@
             and t3.course_subject_id = #{dto.courseSubjectId}
         </if>
         <if test="dto.classId != null">
-            and t8.class_id = #{dto.classId}
+            and t1.textbook_id in (
+            SELECT textbook_id
+            FROM textbook_class_relation
+            WHERE class_id = #{dto.classId}
+            )
         </if>
         <if test="dto.bookName != null and dto.bookName != ''">
             and t3.book_name like concat('%',#{dto.bookName}, '%')