Kaynağa Gözat

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

# Conflicts:
#	src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java
phoenix 1 yıl önce
ebeveyn
işleme
da7c2f11e8

+ 2 - 2
docker-compose.yml

@@ -8,8 +8,8 @@ services:
     image: registry.yingcaibx.com/tl/api:latest
     restart: always
     container_name: tl_api
-#    environment:
-#      - SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL=jdbc:mysql://172.28.175.70:3306/tl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
+    environment:
+      - SPRING_DATASOURCE_DYNAMIC_DATASOURCE_MASTER_URL=jdbc:mysql://mysql:3306/tl?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&autoReconnect=true&failOverReadOnly=false
 #      - MQTT-SERVER=tcp://172.28.175.70:1883
     ports:
       - 8001:8080

+ 2 - 0
src/main/java/com/xjrsoft/XjrSoftApplication.java

@@ -5,6 +5,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * @author Zexy
@@ -12,6 +13,7 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
 @SpringBootApplication
 @EnableAspectJAutoProxy(exposeProxy = true)
 @ComponentScan(nameGenerator = UniqueNameGenerator.class)
+@EnableScheduling
 public class XjrSoftApplication {
     public static void main(String[] args) {
         SpringApplication.run(XjrSoftApplication.class, args);

+ 31 - 0
src/main/java/com/xjrsoft/module/job/DataSourceTask.java

@@ -0,0 +1,31 @@
+package com.xjrsoft.module.job;
+
+import cn.hutool.db.Db;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.utils.DatasourceUtil;
+import com.xjrsoft.common.utils.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.util.Date;
+
+@Component
+@Slf4j
+public class DataSourceTask {
+    /**
+     * 定时刷新动态数据源连接池
+     */
+    @Scheduled(cron = "0 */5 * * * ?")
+    public void RefreshConnectionPool() {
+        System.out.printf("定时刷新动态数据源连接池:%s", DateUtils.format(new Date(), DateUtils.DATE_TIME_PATTERN));
+        DataSource datasource = DatasourceUtil.getDataSource(GlobalConstant.DEFAULT_DATASOURCE_KEY);
+        try {
+            Db use = Db.use(datasource);
+            use.query("select 1");
+        } catch (Exception e) {
+            log.error(e.getMessage(), "定时刷新动态数据源连接池");
+        }
+    }
+}

+ 27 - 11
src/main/java/com/xjrsoft/module/room/controller/RoomBedAdjustController.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.room.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
@@ -23,6 +24,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
 * @title: 调整床位
@@ -40,22 +43,28 @@ public class RoomBedAdjustController {
     private final IRoomBedService roomBedService;
 
     @GetMapping(value = "/class-student")
-    @ApiOperation(value="需要分配/调整床位的学生(分页)")
+    @ApiOperation(value="需要分配/调整床位的学生")
     @SaCheckPermission("roomBedAdjust:detail")
-    public RT<PageOutput<AdjustBedClassPageVo>> classStudent(@Valid AdjustClassPageDto dto){
-
-        Page<AdjustBedClassPageVo> page = roomBedService.getClassStudetBed(new Page<>(dto.getLimit(), dto.getSize()), dto);
-        PageOutput<AdjustBedClassPageVo> pageOutput = ConventPage.getPageOutput(page, AdjustBedClassPageVo.class);
-        return RT.ok(pageOutput);
+    public RT<List<AdjustBedClassPageVo>> classStudent(@Valid AdjustClassPageDto dto){
+        if(ObjectUtil.isNull(dto.getClassId()) && ObjectUtil.isNull(dto.getGradeId())){
+            return RT.ok(new ArrayList<>());
+        }
+        List<AdjustBedClassPageVo> result = roomBedService.getClassStudetBed(dto);
+        if (result == null) {
+            return RT.ok(new ArrayList<>());
+        }
+        return RT.ok(result);
     }
 
     @GetMapping(value = "/bed-student")
-    @ApiOperation(value="床位学生列表(分页)")
+    @ApiOperation(value="床位学生列表")
     @SaCheckPermission("roomBedAdjust:detail")
-    public RT<PageOutput<AdjustBedStudentPageVo>> distributeClassPage(@Valid AdjustBedPageDto dto){
-        Page<AdjustBedStudentPageVo> page = roomBedService.getBedStudetInfo(new Page<>(dto.getLimit(), dto.getSize()), dto);
-        PageOutput<AdjustBedStudentPageVo> pageOutput = ConventPage.getPageOutput(page, AdjustBedStudentPageVo.class);
-        return RT.ok(pageOutput);
+    public RT<List<AdjustBedStudentPageVo>> distributeClassPage(@Valid AdjustBedPageDto dto){
+        List<AdjustBedStudentPageVo> result = roomBedService.getBedStudetInfo(dto);
+        if (result == null) {
+            return RT.ok(new ArrayList<>());
+        }
+        return RT.ok(result);
     }
 
     @GetMapping(value = "/no-bed-student")
@@ -75,6 +84,13 @@ public class RoomBedAdjustController {
         return RT.ok(roomBedService.clearStudentInfoByRoomId(id));
     }
 
+    @DeleteMapping(value="/delete-one")
+    @ApiOperation(value = "单个移出学生")
+    @SaCheckPermission("roomBedAdjust:delete")
+    public RT<Boolean> deleteOne(@Valid @RequestBody Long id){
+        return RT.ok(roomBedService.clearStudentInfoByBedId(id));
+    }
+
     @PutMapping
     @ApiOperation(value = "修改学生的寝室床位")
     @SaCheckPermission("roomBedAdjust:edit")

+ 0 - 1
src/main/java/com/xjrsoft/module/room/controller/RoomRuleController.java

@@ -81,7 +81,6 @@ public class RoomRuleController {
 
         RoomRule roomRule = BeanUtil.toBean(dto, RoomRule.class);
         return RT.ok(roomRuleService.update(roomRule));
-
     }
 
     @DeleteMapping

+ 1 - 1
src/main/java/com/xjrsoft/module/room/dto/AdjustClassPageDto.java

@@ -19,7 +19,7 @@ public class AdjustClassPageDto extends PageInput {
     @ApiModelProperty("年级id")
     public Long gradeId;
 
-    @ApiModelProperty("级id")
+    @ApiModelProperty("级id")
     public Long classId;
 
     @ApiModelProperty("入住性别")

+ 3 - 4
src/main/java/com/xjrsoft/module/room/mapper/RoomBedMapper.java

@@ -10,6 +10,7 @@ import com.xjrsoft.module.room.dto.DistributeRoomBedPageDto;
 import com.xjrsoft.module.room.dto.RoomBedPageDto;
 import com.xjrsoft.module.room.entity.RoomBed;
 import com.xjrsoft.module.room.vo.AdjustBedClassPageVo;
+import com.xjrsoft.module.room.vo.AdjustBedClassStudentPageVo;
 import com.xjrsoft.module.room.vo.AdjustBedStudentPageVo;
 import com.xjrsoft.module.room.vo.DistributeClassPageVo;
 import com.xjrsoft.module.room.vo.DistributeResultListVo;
@@ -59,19 +60,17 @@ public interface RoomBedMapper extends MPJBaseMapper<RoomBed> {
 
     /**
      * 调整床位,左边的班级学生信息
-     * @param page
      * @param dto
      * @return
      */
-    Page<AdjustBedClassPageVo> getClassStudetBed(Page<AdjustClassPageDto> page, @Param("dto") AdjustClassPageDto dto);
+    List<AdjustBedClassStudentPageVo> getClassStudetBed(@Param("dto") AdjustClassPageDto dto);
 
     /**
      * 调整床位,右边的床位学生信息
-     * @param page
      * @param dto
      * @return
      */
-    Page<AdjustBedStudentPageVo> getBedStudentInfo(Page<AdjustBedPageDto> page, @Param("dto") AdjustBedPageDto dto);
+    List<AdjustBedStudentPageVo> getBedStudentInfo(@Param("dto") AdjustBedPageDto dto);
 
 
     /**

+ 5 - 4
src/main/java/com/xjrsoft/module/room/service/IRoomBedService.java

@@ -42,6 +42,8 @@ public interface IRoomBedService extends MPJBaseService<RoomBed> {
 
     Boolean clearStudentInfoByRoomId(Long id);
 
+    Boolean clearStudentInfoByBedId(Long id);
+
     /**
      * 分配床位,第一步查询班级
      * @param page
@@ -69,19 +71,17 @@ public interface IRoomBedService extends MPJBaseService<RoomBed> {
 
     /**
      * 调整床位,左边的班级学生信息
-     * @param page
      * @param dto
      * @return
      */
-    Page<AdjustBedClassPageVo> getClassStudetBed(Page<AdjustClassPageDto> page, AdjustClassPageDto dto);
+    List<AdjustBedClassPageVo> getClassStudetBed(AdjustClassPageDto dto);
 
     /**
      * 调整床位,右边的床位学生信息
-     * @param page
      * @param dto
      * @return
      */
-    Page<AdjustBedStudentPageVo> getBedStudetInfo(Page<AdjustBedPageDto> page, AdjustBedPageDto dto);
+    List<AdjustBedStudentPageVo> getBedStudetInfo(AdjustBedPageDto dto);
 
     /**
      * 未分配床位的学生信息
@@ -92,4 +92,5 @@ public interface IRoomBedService extends MPJBaseService<RoomBed> {
     Page<NoBedStudentPageVo> getNoBedStudent(Page<AdjustBedPageDto> page, AdjustBedPageDto dto);
 
     Boolean adjustBed(AdjustStudentBedDto dto);
+
 }

+ 47 - 6
src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java

@@ -2,6 +2,8 @@ package com.xjrsoft.module.room.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -26,6 +28,7 @@ import com.xjrsoft.module.room.mapper.RoomBedRecordMapper;
 import com.xjrsoft.module.room.mapper.RoomMapper;
 import com.xjrsoft.module.room.service.IRoomBedService;
 import com.xjrsoft.module.room.vo.AdjustBedClassPageVo;
+import com.xjrsoft.module.room.vo.AdjustBedClassStudentPageVo;
 import com.xjrsoft.module.room.vo.AdjustBedStudentPageVo;
 import com.xjrsoft.module.room.vo.DistributeClassPageVo;
 import com.xjrsoft.module.room.vo.DistributeResultClassVo;
@@ -93,12 +96,27 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
                 MPJWrappers.<RoomBed>lambdaJoin().eq(RoomBed::getRoomId, id)
         );
         for (RoomBed roomBed : bedList) {
-            roomBed.setStudentUserId(null);
-            roomBedMapper.updateById(roomBed);
+            UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.eq("id", roomBed.getId());
+            updateWrapper.setSql("student_user_id = null");
+            updateWrapper.setSql("is_check_in = 0");
+            roomBedMapper.update(roomBed, updateWrapper);
         }
         return true;
     }
 
+    @Override
+    public Boolean clearStudentInfoByBedId(Long id) {
+        UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("id", id);
+        updateWrapper.setSql("student_user_id = null");
+        updateWrapper.setSql("is_check_in = 0");
+
+        RoomBed roomBed = roomBedMapper.selectById(id);
+        roomBedMapper.update(roomBed, updateWrapper);
+        return true;
+    }
+
     @Override
     public Page<DistributeClassPageVo> getDistributeClassInfo(Page<DistributeClassPageDto> page, DistributeClassPageDto dto) {
         return roomBedMapper.getDistributeClassInfo(page, dto);
@@ -221,14 +239,37 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
     }
 
     @Override
-    public Page<AdjustBedClassPageVo> getClassStudetBed(Page<AdjustClassPageDto> page, AdjustClassPageDto dto) {
-        Page<AdjustBedClassPageVo> result = roomBedMapper.getClassStudetBed(page, dto);
+    public List<AdjustBedClassPageVo> getClassStudetBed(AdjustClassPageDto dto) {
+        List<BaseClass> classList = baseClassMapper.selectList(
+            new QueryWrapper<BaseClass>().lambda()
+            .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+            .eq(ObjectUtil.isNotNull(dto.getClassId()), BaseClass::getId, dto.getClassId())
+            .eq(ObjectUtil.isNotNull(dto.getGradeId()), BaseClass::getGradeId, dto.getGradeId())
+        );
+        List<AdjustBedClassPageVo> result = new ArrayList<>();
+        List<AdjustBedClassStudentPageVo> allStudent = roomBedMapper.getClassStudetBed(dto);
+        for (BaseClass classOne : classList) {
+            List<AdjustBedClassStudentPageVo> studentList = new ArrayList<>();
+            for (AdjustBedClassStudentPageVo adjustBedClassStudentPageVo : allStudent) {
+                if(!classOne.getId().toString().equals(adjustBedClassStudentPageVo.getClassId())){
+                    continue;
+                }
+                studentList.add(adjustBedClassStudentPageVo);
+            }
+            if(studentList.isEmpty()){
+                continue;
+            }
+            AdjustBedClassPageVo adjustBedClassPageVo = BeanUtil.toBean(classOne, AdjustBedClassPageVo.class);
+            adjustBedClassPageVo.setStudentList(studentList);
+            result.add(adjustBedClassPageVo);
+        }
+        
         return result;
     }
 
     @Override
-    public Page<AdjustBedStudentPageVo> getBedStudetInfo(Page<AdjustBedPageDto> page, AdjustBedPageDto dto) {
-        return roomBedMapper.getBedStudentInfo(page, dto);
+    public List<AdjustBedStudentPageVo> getBedStudetInfo(AdjustBedPageDto dto) {
+        return roomBedMapper.getBedStudentInfo(dto);
     }
 
     @Override

+ 12 - 31
src/main/java/com/xjrsoft/module/room/service/impl/RoomRuleServiceImpl.java

@@ -18,8 +18,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Arrays;
 import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
 * @title: 寝室生成规则
@@ -52,35 +50,6 @@ public class RoomRuleServiceImpl extends MPJBaseServiceImpl<RoomRuleMapper, Room
     @Transactional(rollbackFor = Exception.class)
     public Boolean update(RoomRule roomRule) {
         roomRuleRoomRuleMapper.updateById(roomRule);
-        //********************************* RoomRuleItem  增删改  开始 *******************************************/
-        {
-            // 查出所有子级的id
-            List<RoomRuleItem> roomRuleItemList = roomRuleRoomRuleItemMapper.selectList(Wrappers.lambdaQuery(RoomRuleItem.class).eq(RoomRuleItem::getRoomRuleId, roomRule.getId()).select(RoomRuleItem::getId));
-            List<Long> roomRuleItemIds = roomRuleItemList.stream().map(RoomRuleItem::getId).collect(Collectors.toList());
-            //原有子表单 没有被删除的主键
-            List<Long> roomRuleItemOldIds = roomRule.getRoomRuleItemList().stream().map(RoomRuleItem::getId).filter(Objects::nonNull).collect(Collectors.toList());
-            //找到需要删除的id
-            List<Long> roomRuleItemRemoveIds = roomRuleItemIds.stream().filter(item -> !roomRuleItemOldIds.contains(item)).collect(Collectors.toList());
-
-            for (RoomRuleItem roomRuleItem : roomRule.getRoomRuleItemList()) {
-                //如果不等于空则修改
-                if (roomRuleItem.getId() != null) {
-                    roomRuleRoomRuleItemMapper.updateById(roomRuleItem);
-                }
-                //如果等于空 则新增
-                else {
-                    //已经不存在的id 删除
-                    roomRuleItem.setRoomRuleId(roomRule.getId());
-                    roomRuleRoomRuleItemMapper.insert(roomRuleItem);
-                }
-            }
-            //已经不存在的id 删除
-            if(roomRuleItemRemoveIds.size() > 0){
-                roomRuleRoomRuleItemMapper.deleteBatchIds(roomRuleItemRemoveIds);
-            }
-        }
-        //********************************* RoomRuleItem  增删改  结束 *******************************************/
-
         return true;
     }
 
@@ -112,6 +81,18 @@ public class RoomRuleServiceImpl extends MPJBaseServiceImpl<RoomRuleMapper, Room
                 houseNumber  = houseNumber + 2;
             }
             record.setHouseNumber(houseNumber + "位");
+
+            List<RoomRuleItem> roomRuleItems = roomRuleRoomRuleItemMapper.selectList(
+                    new QueryWrapper<RoomRuleItem>().lambda().eq(RoomRuleItem::getRoomRuleId, record.getId())
+            );
+            String buildIds = "";
+            for (int i = 0; i < roomRuleItems.size(); i ++){
+                if(i > 0){
+                    buildIds += ",";
+                }
+                buildIds = buildIds + roomRuleItems.get(i).getOfficeBuildId();
+            }
+            record.setBuildIds(buildIds);
         }
         return result;
     }

+ 6 - 22
src/main/java/com/xjrsoft/module/room/vo/AdjustBedClassPageVo.java

@@ -4,6 +4,8 @@ import com.alibaba.excel.annotation.write.style.ContentStyle;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 
 /**
 * @title: 寝室床位分页列表出参
@@ -14,35 +16,17 @@ import lombok.Data;
 @Data
 public class AdjustBedClassPageVo {
 
-    @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("学生id")
-    private String userId;
 
     @ContentStyle(dataFormat = 49)
     @ApiModelProperty("班级id")
-    private String classId;
+    private String id;
 
     @ContentStyle(dataFormat = 49)
     @ApiModelProperty("班级名称")
-    private String className;
+    private String name;
 
     @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("学生名称")
-    private String studentName;
+    @ApiModelProperty("学生信息")
+    private List<AdjustBedClassStudentPageVo> studentList;
 
-    @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("入住性别")
-    private String genderCn;
-
-    @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("楼栋名称")
-    private String buildName;
-
-    @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("寝室名称")
-    private String roomName;
-
-    @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("床位")
-    private String bedNumber;
 }

+ 51 - 0
src/main/java/com/xjrsoft/module/room/vo/AdjustBedClassStudentPageVo.java

@@ -0,0 +1,51 @@
+package com.xjrsoft.module.room.vo;
+
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+
+/**
+* @title: 寝室床位分页列表出参
+* @Author dzx
+* @Date: 2023-12-27
+* @Version 1.0
+*/
+@Data
+public class AdjustBedClassStudentPageVo {
+
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班级id")
+    private String classId;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("学生id")
+    private String userId;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("学生名称")
+    private String studentName;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("入住性别")
+    private String genderCn;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("楼栋名称")
+    private String buildName;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("寝室名称")
+    private String roomName;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("床位")
+    private String bedNumber;
+}

+ 5 - 1
src/main/java/com/xjrsoft/module/room/vo/AdjustBedStudentPageVo.java

@@ -39,9 +39,13 @@ public class AdjustBedStudentPageVo {
     private String studentName;
 
     @ContentStyle(dataFormat = 49)
-    @ApiModelProperty("寝室长id(null即为未设置寝室长,非空即为设置了寝室长)")
+    @ApiModelProperty("学生id(null即为未设置寝室长,非空即为设置了寝室长)")
     private String studentUserId;
 
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("寝室长id(null即为未设置寝室长,非空即为设置了寝室长)")
+    private String studentAppointId;
+
     @ContentStyle(dataFormat = 49)
     @ApiModelProperty("是否是混合寝室【一个寝室有多个班级的学生】(1:是 0:否)")
     private Integer isMax;

+ 6 - 0
src/main/java/com/xjrsoft/module/room/vo/RoomRulePageVo.java

@@ -43,4 +43,10 @@ public class RoomRulePageVo {
      */
     @ApiModelProperty("门牌号")
     private String houseNumber;
+
+    /**
+     * 绑定楼栋
+     */
+    @ApiModelProperty("绑定楼栋id")
+    private String buildIds;
 }

+ 23 - 11
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -187,17 +187,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.ssssssss.magicapi.core.service.MagicAPIService;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -1303,20 +1293,38 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         try {
 
             //表单提交完毕后 发起流程
+            System.out.println("开始发起流程");
+            long startTime = System.currentTimeMillis();
             ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), variableMap);
+            long endTime = System.currentTimeMillis();
+            System.out.printf("发起流程:%d \n",(endTime - startTime));
+            startTime = System.currentTimeMillis();
 
             List<Task> list = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
 
+            endTime = System.currentTimeMillis();
+            System.out.printf("发起流程2:%d \n",(endTime - startTime));
+            startTime = System.currentTimeMillis();
 //            List<LaunchAndApproveVo> result = isPrevChooseApprove(workflowSchemaConfig, list, variableMap);
 
             //如果不需要指定审批人 默认走自动同意规则
+
+
             invokeAutoAgree(processInstance.getId(), workflowSchema.getId(), workflowSchemaConfig, list);
 
+            endTime = System.currentTimeMillis();
+            System.out.printf("发起流程3:%d \n",(endTime - startTime));
+            startTime = System.currentTimeMillis();
+
             //重新获取任务节点,判断是否需要指定下一审批人
             list = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
 
             List<LaunchAndApproveVo> result = isPrevChooseApprove(workflowSchemaConfig, list, variableMap);
 
+            endTime = System.currentTimeMillis();
+            System.out.printf("发起流程4:%d \n",(endTime - startTime));
+            startTime = System.currentTimeMillis();
+
             updateFileInfo(dto.getFileFolderIds(), processInstance.getId());
 
             //保存 流程 表单 关联 数据
@@ -1330,6 +1338,10 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
                 session.getConnection().setAutoCommit(Boolean.FALSE);
                 session.commit();
             }
+
+            endTime = System.currentTimeMillis();
+            System.out.printf("发起流程5:%d \n",(endTime - startTime));
+
             return result;
         } catch (Exception e) {
             for (Session session : sessionList) {

+ 4 - 3
src/main/resources/mapper/room/RoomBedMapper.xml

@@ -134,7 +134,7 @@
         ORDER BY t2.sort_code,t1.sort_code
     </select>
 
-    <select id="getClassStudetBed" parameterType="com.xjrsoft.module.room.dto.AdjustClassPageDto" resultType="com.xjrsoft.module.room.vo.AdjustBedClassPageVo">
+    <select id="getClassStudetBed" parameterType="com.xjrsoft.module.room.dto.AdjustClassPageDto" resultType="com.xjrsoft.module.room.vo.AdjustBedClassStudentPageVo">
         SELECT t1.user_id,t4.id AS class_id, t4.name AS class_name,t2.name AS student_name,REPLACE(REPLACE(t2.gender,1,'男'),2,'女') AS gender_cn,t7.name AS build_name,t6.room_name,t5.bed_number FROM base_student t1
         LEFT JOIN xjr_user t2 ON t1.user_id = t2.id
         LEFT JOIN base_student_school_roll t3 ON t1.user_id = t3.user_id
@@ -143,11 +143,12 @@
         LEFT JOIN room t6 ON t5.room_id = t6.id
         LEFT JOIN base_office_build t7 ON t6.office_build_id = t7.id
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
+        and t3.stduy_status = 'FB3002'
         <if test="dto.gradeId != null">
             and t4.grade_id = #{dto.gradeId}
         </if>
         <if test="dto.classId != null">
-            and t4.class_id = #{dto.classId}
+            and t4.id = #{dto.classId}
         </if>
         <if test="dto.gender != null and dto.gender != ''">
             and t6.gender = #{dto.gender}
@@ -169,7 +170,7 @@
     </select>
 
     <select id="getBedStudentInfo" parameterType="com.xjrsoft.module.room.dto.AdjustBedPageDto" resultType="com.xjrsoft.module.room.vo.AdjustBedStudentPageVo">
-        SELECT t1.id,t3.name AS build_name,t2.room_name,t5.name AS gender_cn,t1.bed_number,t4.name AS student_name,t6.student_user_id,t2.is_max,t2.id as room_id FROM room_bed t1
+        SELECT t1.id,t3.name AS build_name,t2.room_name,t5.name AS gender_cn,t1.bed_number,t4.name AS student_name,t4.id as student_user_id,t6.student_user_id as student_appoint_id,t2.is_max,t2.id as room_id FROM room_bed t1
         LEFT JOIN room t2 ON t1.room_id = t2.id
         LEFT JOIN base_office_build t3 ON t2.office_build_id = t3.id
         LEFT JOIN xjr_user t4 ON t1.student_user_id = t4.id

+ 70 - 18
src/main/resources/sqlScript/20231218_sql.sql

@@ -502,6 +502,8 @@ CREATE TABLE textbook_warehouse_record
     `enabled_mark` INT NOT NULL COMMENT '有效标志',
     `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
     `textbook_id` bigint NULL DEFAULT NULL COMMENT '教材管理编号',
+    `data_id` bigint DEFAULT NULL COMMENT '数据编号(根据入库方式,编号来自不同数据表)',
+    `data_item_id` bigint DEFAULT NULL COMMENT '数据项项编号(根据入库方式,编号来自不同数据表)',
     `warehouse_number` int NULL DEFAULT NULL COMMENT '入库数量',
     `source` varchar(200) NULL DEFAULT NULL COMMENT '来源',
     `price` decimal(10,2) NULL DEFAULT NULL COMMENT '定价(元)',
@@ -519,20 +521,23 @@ CREATE TABLE textbook_warehouse_record
 DROP TABLE IF EXISTS textbook_issue_record;
 CREATE TABLE textbook_issue_record
 (
-    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 '序号',
-    `wf_textbook_claim_id` bigint NULL DEFAULT NULL COMMENT '教材申领编号',
-    `wf_textbook_claim_item_id` bigint NULL DEFAULT NULL COMMENT '教材申领项编号',
-    `issue_number` int NULL DEFAULT NULL COMMENT '出库数量',
-    `remaining_number` int NULL DEFAULT NULL COMMENT '剩余数量',
-    `receive_user_id` bigint NULL DEFAULT NULL COMMENT '领取用户编号',
-    `issue_user_id` bigint NULL DEFAULT NULL COMMENT '出库用户编号',
+    `id` bigint NOT NULL COMMENT '主键编号',
+    `create_user_id` bigint DEFAULT NULL COMMENT '创建人',
+    `create_date` datetime DEFAULT NULL COMMENT '创建时间',
+    `modify_user_id` bigint DEFAULT NULL COMMENT '修改人',
+    `modify_date` datetime DEFAULT NULL COMMENT '修改时间',
+    `delete_mark` int NOT NULL COMMENT '删除标记',
+    `enabled_mark` int NOT NULL COMMENT '有效标志',
+    `sort_code` int DEFAULT NULL COMMENT '序号',
+    `textbook_id` bigint NULL DEFAULT NULL COMMENT '教材管理编号',
+    `data_id` bigint DEFAULT NULL COMMENT '数据编号(根据出库方式,编号来自不同数据表)',
+    `data_item_id` bigint DEFAULT NULL COMMENT '数据项项编号(根据出库方式,编号来自不同数据表)',
+    `issue_number` int DEFAULT NULL COMMENT '出库数量',
+    `remaining_number` int DEFAULT NULL COMMENT '剩余数量',
+    `receive_user_id` bigint DEFAULT NULL COMMENT '领取用户编号',
+    `issue_user_id` bigint DEFAULT NULL COMMENT '出库用户编号',
+    `issue_mode` varchar(20) DEFAULT NULL COMMENT '出库方式(xjr_dictionary_item[issue_mode])',
+    `remark` varchar(1000) DEFAULT NULL COMMENT '备注',
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '教材出库记录';
 
@@ -580,7 +585,7 @@ CREATE TABLE wf_textbook_recede
     `recede_address` varchar(1000) NULL DEFAULT NULL COMMENT '退还地点',
     `status` int not null default 0 COMMENT '状态(1:结束 0:未结束)',
     PRIMARY KEY (`id`)
-) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '书申请';
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '退书申请';
 
 -- ----------------------------
 -- 退书申请项
@@ -600,7 +605,7 @@ CREATE TABLE wf_textbook_recede_item
     `textbook_id` bigint NULL DEFAULT NULL COMMENT '教材管理编号',
     `number` int NULL DEFAULT NULL COMMENT '数量',
     PRIMARY KEY (`id`)
-) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '书申请项';
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '退书申请项';
 -- ------------------------------------------------------------------教材管理--------------------------------------------------------------------
 
 -- ------------------------------------------------------------------寝室管理--------------------------------------------------------------------
@@ -618,7 +623,6 @@ CREATE TABLE room_rule
     `delete_mark` INT NOT NULL COMMENT '删除标记',
     `enabled_mark` INT NOT NULL COMMENT '有效标志',
     `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
-    `floor_number` int NOT NULL COMMENT '楼层',
     `name` varchar(100) NULL DEFAULT NULL COMMENT '规则名称',
     `rule` varchar(500) NULL DEFAULT NULL COMMENT '规则配置(多个规则用逗号隔开)',
     `remark` varchar(1000) NULL DEFAULT NULL COMMENT '备注',
@@ -870,7 +874,7 @@ CREATE TABLE room_bed_check_record
     `user_id` bigint NULL DEFAULT NULL COMMENT '填写人',
     `class_id` bigint NULL DEFAULT NULL COMMENT '班级编号',
     `check_record_time` DATETIME NULL DEFAULT NULL COMMENT '查寝时间',
-    `condition` varchar(1000) NULL DEFAULT NULL COMMENT '情况',
+    `record` varchar(1000) NULL DEFAULT NULL COMMENT '情况记录',
     `remark` varchar(1000) NULL DEFAULT NULL COMMENT '备注',
     `file_id` BIGINT NULL DEFAULT NULL COMMENT '附件文件id',
     PRIMARY KEY (`id`)
@@ -892,6 +896,9 @@ CREATE TABLE room_bed_check_record_relation
     `sort_code` INT NULL DEFAULT NULL COMMENT '序号',
     `room_bed_check_record_id` bigint NULL DEFAULT NULL COMMENT '查寝记录编号(room_bed_check_record)',
     `room_id` bigint NOT NULL COMMENT '寝室编号(room)',
+    `office_build_id` varchar(100) NULL DEFAULT NULL COMMENT '楼栋(base_office_build)',
+    `floor_number` int NULL DEFAULT NULL COMMENT '楼层',
+    `room_name` varchar(100) NULL DEFAULT NULL COMMENT '寝室名称',
     PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '查寝记录(关联寝室)';
 
@@ -963,6 +970,51 @@ CREATE TABLE weekly_duty_schedule
 
 ALTER TABLE base_office_build ADD COLUMN `build_number` INT NULL DEFAULT NULL COMMENT '楼栋号' AFTER build_type;
 
+-- ----------------------------
+-- 公文收文
+-- ----------------------------
+DROP TABLE IF EXISTS official_document_received;
+CREATE TABLE official_document_received
+(
+    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 '序号',
+    `received_title` varchar(200) NULL DEFAULT NULL COMMENT '收文标题',
+    `received_number` varchar(200) NULL DEFAULT NULL COMMENT '收文文号',
+    `received_date` date NULL DEFAULT NULL COMMENT '收文时间',
+    `communication_org` varchar(200) NULL DEFAULT NULL COMMENT '来文机构',
+    `communication_number` varchar(200) NULL DEFAULT NULL COMMENT '来文文号',
+    `checkout_time` date NULL DEFAULT NULL COMMENT '办结时间',
+    `document_level`varchar(20) NULL DEFAULT NULL COMMENT '文件密级(xjr_dictionary_item[document_level])',
+    `emergency_level`varchar(20) NULL DEFAULT NULL COMMENT '紧急程度(xjr_dictionary_item[emergency_level])',
+    `received_type`varchar(20) NULL DEFAULT NULL COMMENT '收文类型(xjr_dictionary_item[received_type])',
+    `file_id` BIGINT NULL DEFAULT NULL COMMENT '附件文件id',
+    PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT '公文收文';
+
+DROP TABLE IF EXISTS `wf_teacherleave`;
+CREATE TABLE `wf_teacherleave` (
+    `id` bigint NOT NULL,
+    `user_id` longtext COMMENT '申请人',
+    `department` varchar(500) DEFAULT NULL COMMENT '所在部门',
+    `leave_start_time` datetime DEFAULT NULL COMMENT '请假开始时间',
+    `leave_end_time` datetime DEFAULT NULL COMMENT '请假结束时间',
+    `leave_days` double DEFAULT NULL COMMENT '请假天数',
+    `leave_type` varchar(500) DEFAULT NULL COMMENT '请假类型',
+    `is_it_a_homeroom_teacher` varchar(500) DEFAULT NULL COMMENT '是否班主任',
+    `middle_level_or_not` varchar(500) DEFAULT NULL COMMENT '是否中层',
+    `relief_homeroo_teacher` varchar(500) DEFAULT NULL COMMENT '替班班主任',
+    `relief_teacher` varchar(500) DEFAULT NULL COMMENT '替班教师',
+    `reason_for_leave` longtext COMMENT '请假事由',
+    `annex` longtext COMMENT '附件',
+    PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='教职工请假流程';
+
 
 
 

+ 19 - 16
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -16,7 +16,7 @@ import java.util.List;
 public class FreeMarkerGeneratorTest {
 
     private static final DataSource ds = new SimpleDataSource("jdbc:mysql://10.150.10.139:3306/tl?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true",
-            "root", "Zwr~-f6H,u6QE^]C-AD_");
+            "root" , "Zwr~-f6H,u6QE^]C-AD_" );
 
     @Test
     public void generateCodesTest() throws IOException {
@@ -63,7 +63,6 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
-
     @Test
     public void generateCodesTest1() throws IOException {
         List<TableConfig> tableConfigs = new ArrayList<>();
@@ -830,7 +829,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学籍异动类别
-     *
      * @throws IOException
      */
     @Test
@@ -895,6 +893,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 升学管理
+     *
      */
     @Test
     public void gcSchoolRollFurtherEducation() throws IOException {
@@ -925,6 +924,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 班级荣誉
+     *
      */
     @Test
     public void gcClassHonors() throws IOException {
@@ -955,6 +955,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 考勤配置
+     *
      */
     @Test
     public void gcAttendanceConfig() throws IOException {
@@ -984,6 +985,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 考勤记录
+     *
      */
     @Test
     public void gcAttendanceRecord() throws IOException {
@@ -1013,6 +1015,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 需要考勤的人员管理
+     *
      */
     @Test
     public void gcAttendancePersonneld() throws IOException {
@@ -1042,6 +1045,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 班主任事项请假
+     *
      */
     @Test
     public void gcHeadTeacherLeave() throws IOException {
@@ -1071,6 +1075,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 干部部门管理
+     *
      */
     @Test
     public void gcCadreDept() throws IOException {
@@ -1100,6 +1105,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 干部候选人
+     *
      */
     @Test
     public void gcWfCadreCandidate() throws IOException {
@@ -1129,6 +1135,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 教师请假
+     *
      */
     @Test
     public void gcWfTeacherleave() throws IOException {
@@ -1158,6 +1165,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学科组管理
+     *
      */
     @Test
     public void gcSubjectGroup() throws IOException {
@@ -1187,6 +1195,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学科组课程管理
+     *
      */
     @Test
     public void gcSubjectGroupCourse() throws IOException {
@@ -1216,6 +1225,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学科组课程管理
+     *
      */
     @Test
     public void gcTextBookManage() throws IOException {
@@ -1263,6 +1273,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 教材教辅征订
+     *
      */
     @Test
     public void gcWfTextbookSubscription() throws IOException {
@@ -1300,6 +1311,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学科组课程管理
+     *
      */
     @Test
     public void gcTextbookClassWarehouse() throws IOException {
@@ -1329,6 +1341,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 教材申领
+     *
      */
     @Test
     public void gcWfStudentTextbookClaim() throws IOException {
@@ -1366,6 +1379,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学生教材认领记录
+     *
      */
     @Test
     public void gcTextbookStudentClaim() throws IOException {
@@ -1394,6 +1408,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 教材出库记录
+     *
      */
     @Test
     public void gcTextbookIssueRecord() throws IOException {
@@ -1422,6 +1437,7 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 作业本征订
+     *
      */
     @Test
     public void gcWfExerciseBook() throws IOException {
@@ -1459,7 +1475,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 寝室维护
-     *
      * @throws IOException
      */
     @Test
@@ -1489,7 +1504,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 寝室维护
-     *
      * @throws IOException
      */
     @Test
@@ -1519,7 +1533,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 学生班级详细信息维护
-     *
      * @throws IOException
      */
     @Test
@@ -1546,10 +1559,8 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
-
     /**
      * 寝室维护
-     *
      * @throws IOException
      */
     @Test
@@ -1579,7 +1590,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 教材领取人员
-     *
      * @throws IOException
      */
     @Test
@@ -1609,7 +1619,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 宿管员管理
-     *
      * @throws IOException
      */
     @Test
@@ -1636,10 +1645,8 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
-
     /**
      * 宿管员管理
-     *
      * @throws IOException
      */
     @Test
@@ -1670,7 +1677,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 寝室干部任命(任命学生)
-     *
      * @throws IOException
      */
     @Test
@@ -1700,7 +1706,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 寝室申请
-     *
      * @throws IOException
      */
     @Test
@@ -1730,7 +1735,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 留校住宿申请
-     *
      * @throws IOException
      */
     @Test
@@ -1795,7 +1799,6 @@ public class FreeMarkerGeneratorTest {
 
     /**
      * 查寝记录
-     *
      * @throws IOException
      */
     @Test