Ver Fonte

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

dzx há 1 ano atrás
pai
commit
a4f2195078
21 ficheiros alterados com 407 adições e 73 exclusões
  1. 8 2
      src/main/java/com/xjrsoft/module/form/dto/FormExecuteInfoDto.java
  2. 8 0
      src/main/java/com/xjrsoft/module/form/service/IFormExecuteService.java
  3. 57 5
      src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java
  4. 19 10
      src/main/java/com/xjrsoft/module/material/controller/MaterialTaskController.java
  5. 3 6
      src/main/java/com/xjrsoft/module/material/controller/MaterialTypeController.java
  6. 19 0
      src/main/java/com/xjrsoft/module/material/dto/MaterialTaskAssignAppendixDto.java
  7. 22 0
      src/main/java/com/xjrsoft/module/material/dto/ViewContentDto.java
  8. 10 9
      src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskAssignServiceImpl.java
  9. 73 24
      src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskServiceImpl.java
  10. 2 5
      src/main/java/com/xjrsoft/module/material/service/impl/MaterialTypeServiceImpl.java
  11. 5 1
      src/main/java/com/xjrsoft/module/material/vo/MaterialTaskAssignListVo.java
  12. 6 0
      src/main/java/com/xjrsoft/module/material/vo/MaterialTaskWaitPageVo.java
  13. 8 0
      src/main/java/com/xjrsoft/module/room/controller/RoomBedAdjustController.java
  14. 6 0
      src/main/java/com/xjrsoft/module/room/mapper/RoomBedMapper.java
  15. 11 0
      src/main/java/com/xjrsoft/module/room/service/IRoomBedService.java
  16. 118 9
      src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java
  17. 7 0
      src/main/java/com/xjrsoft/module/room/vo/AdjustBedClassPageVo.java
  18. 8 0
      src/main/java/com/xjrsoft/module/room/vo/AdjustBedStudentPageVo.java
  19. 2 1
      src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java
  20. 1 0
      src/main/java/com/xjrsoft/module/student/vo/PersonalPortraitPersonalInfoVo.java
  21. 14 1
      src/main/resources/mapper/room/RoomBedMapper.xml

+ 8 - 2
src/main/java/com/xjrsoft/module/form/dto/FormExecuteInfoDto.java

@@ -22,8 +22,8 @@ public class FormExecuteInfoDto {
     /**
      * 主键id
      */
-    @NotBlank(message = "自定义表单 发布id 不能为空")
-    @ApiModelProperty("自定义表单 主键id")
+    @NotBlank(message = "自定义表单 数据id 不能为空")
+    @ApiModelProperty("自定义表单 数据的主键id")
     private String id;
 //
 //    /**
@@ -31,4 +31,10 @@ public class FormExecuteInfoDto {
 //     */
 //    @ApiModelProperty("自定义表单 表单id")
 //    private String formId;
+
+    /**
+     * 表单模板id
+     */
+    @ApiModelProperty("自定义表单 表单模板id")
+    private Long templateId;
 }

+ 8 - 0
src/main/java/com/xjrsoft/module/form/service/IFormExecuteService.java

@@ -61,12 +61,20 @@ public interface IFormExecuteService {
      */
     Object info(FormExecuteInfoDto dto);
 
+    /**
+     * 获取自定义表单 表单数据
+     * @return
+     */
+    Object getInfoByTemplateId(FormExecuteInfoDto dto);
+
     /**
      * App 获取自定义表单 表单数据
      * @return
      */
     Object appInfo(AppFormExecuteInfoDto dto);
 
+    Long addByTemplateId(FormExecuteAddOrUpdateDto dto);
+
     /**
      * 自定义表单 新增
      * @param dto

+ 57 - 5
src/main/java/com/xjrsoft/module/form/service/impl/FormExecuteServiceImpl.java

@@ -351,6 +351,42 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
     }
 
+    @Override
+    public Object getInfoByTemplateId(FormExecuteInfoDto dto) {
+        //自定义表单数据
+        FormTemplate template = formTemplateMapper.selectById(dto.getTemplateId());
+
+        String formJson = template.getFormJson();
+        //自定义表单配置
+        FormDesignConfig formDesignConfig = JSONUtil.toBean(formJson, FormDesignConfig.class);
+        //表关系配置
+        List<TableConfig> tableConfigs = formDesignConfig.getTableConfigs();
+        //主表
+        Optional<TableConfig> mainTable = tableConfigs.stream().filter(TableConfig::getIsMain).findFirst();
+
+        if (mainTable.isPresent()) {
+            TableConfig tableConfig = mainTable.get();
+            String tableName = tableConfig.getTableName();
+
+            Map<String, List<ComponentConfig>> formComponentListMap = GeneratorUtil.buildFormComponentList(formDesignConfig.getFormJson().getList());
+            List<String> fieldsList = new ArrayList<>();
+            for (ComponentConfig config : formComponentListMap.get(tableName)) {
+                String type = config.getType();
+                if (StrUtil.equalsIgnoreCase(type, ComponentTypeConstant.TIME_RANGE) || StrUtil.equalsIgnoreCase(type, ComponentTypeConstant.DATE_RANGE)) {
+                    fieldsList.add(config.getBindStartTime());
+                    fieldsList.add(config.getBindEndTime());
+                } else {
+                    fieldsList.add(config.getBindField());
+                }
+            }
+
+            return getFormData(tableName, fieldsList, formDesignConfig, dto.getId());
+        } else {
+            throw new MyException("主表不存在");
+        }
+
+    }
+
     @Override
     public Object appInfo(AppFormExecuteInfoDto dto) {
         AppFuncDesign funcDesign = appFuncDesignService.getById(dto.getFuncId());
@@ -403,8 +439,21 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         //自定义表单数据
         FormTemplate template = formTemplateMapper.selectById(formRelease.getFormId());
 
-        return insertFormData(formData, template);
+        long id = insertFormData(formData, template);
+        if(id != 0){
+            return true;
+        }
+        return false;
+    }
 
+    @Transactional
+    @Override
+    public Long addByTemplateId(FormExecuteAddOrUpdateDto dto) {
+        Map<String, Object> formData = dto.getFormData();
+
+        //自定义表单数据
+        FormTemplate template = formTemplateMapper.selectById(dto.getReleaseId());
+        return insertFormData(formData, template);
     }
 
     @Transactional
@@ -421,7 +470,11 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
         FormTemplate template = new FormTemplate();
         template.setFormJson(configJson);
 
-        return insertFormData(formData, template);
+        long id = insertFormData(formData, template);
+        if(id != 0){
+            return true;
+        }
+        return false;
     }
 
     @Transactional
@@ -787,7 +840,7 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
 
 
     @Transactional
-    public boolean insertFormData(Map<String, Object> formData, FormTemplate template) {
+    public Long insertFormData(Map<String, Object> formData, FormTemplate template) {
         String formJson = template.getFormJson();
         //自定义表单配置
         FormDesignConfig formDesignConfig = JSONUtil.toBean(formJson, FormDesignConfig.class);
@@ -847,11 +900,10 @@ public class FormExecuteServiceImpl implements IFormExecuteService {
                     }
                 }
                 codeRuleService.useEncode(autoCodeList);
+                return keyValue;
             } catch (Exception e) {
                 throw new MyException("新增数据失败,数据回滚!", e);
             }
-
-            return true;
         } else {
             throw new MyException("主表不存在");
         }

+ 19 - 10
src/main/java/com/xjrsoft/module/material/controller/MaterialTaskController.java

@@ -16,15 +16,9 @@ import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.app.dto.UpdateEnableMarkDto;
-import com.xjrsoft.module.material.dto.AddMaterialTaskAssignDto;
-import com.xjrsoft.module.material.dto.AddMaterialTaskDto;
-import com.xjrsoft.module.material.dto.MaterialTaskAssignAppendixDto;
-import com.xjrsoft.module.material.dto.MaterialTaskAssignApprovedDto;
-import com.xjrsoft.module.material.dto.MaterialTaskAssignListDto;
-import com.xjrsoft.module.material.dto.MaterialTaskAssignPageDto;
-import com.xjrsoft.module.material.dto.MaterialTaskPageDto;
-import com.xjrsoft.module.material.dto.MaterialTaskWaitPageDto;
-import com.xjrsoft.module.material.dto.UpdateMaterialTaskDto;
+import com.xjrsoft.module.form.dto.FormExecuteInfoDto;
+import com.xjrsoft.module.form.service.IFormExecuteService;
+import com.xjrsoft.module.material.dto.*;
 import com.xjrsoft.module.material.entity.*;
 import com.xjrsoft.module.material.service.IMaterialTaskAppendixService;
 import com.xjrsoft.module.material.service.IMaterialTaskAssignService;
@@ -75,6 +69,8 @@ public class MaterialTaskController {
 
     private final IMaterialTaskAssignService materialTaskAssignService;
 
+    private final IFormExecuteService formExecuteService;
+
     @GetMapping(value = "/page")
     @ApiOperation(value = "材料提交任务列表(分页 我发布的)")
     @SaCheckPermission("materialtask:detail")
@@ -112,7 +108,10 @@ public class MaterialTaskController {
                 .like(StrUtil.isNotBlank(dto.getAssignedUser()), XjrUser::getName, dto.getAssignedUser())
                 .eq(ObjectUtil.isNotEmpty(dto.getStatus()), MaterialTask::getStatus, dto.getStatus())
 //                .eq((ObjectUtil.isNotEmpty(dto.getMaterialTypeId())) && dto.getMaterialTypeId() > 0, MaterialTask::getMaterialTypeId, dto.getMaterialTypeId())
-                .eq((ObjectUtil.isNotEmpty(dto.getExtStatus())), MaterialTaskAssign::getStatus, dto.getExtStatus())
+                .eq((dto.getExtStatus() != null && dto.getExtStatus() != 1), MaterialTaskAssign::getStatus, dto.getExtStatus())
+                .and((dto.getExtStatus() != null && dto.getExtStatus() == 1),wp -> wp.eq(MaterialTaskAssign::getStatus, 1)
+                        .or()
+                        .eq(MaterialTaskAssign::getStatus, 4))
                 .select(MaterialTask::getId)
                 .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskWaitPageVo.class).contains(x.getProperty()))
                 .innerJoin(MaterialTaskAssign.class, MaterialTaskAssign::getMaterialTaskId, MaterialTask::getId, ext -> ext.eq(MaterialTaskAssign::getUserId, StpUtil.getLoginIdAsLong()))
@@ -122,6 +121,7 @@ public class MaterialTaskController {
                 .selectAs(MaterialTaskAssign::getTransferSubmitedPerson, MaterialTaskWaitPageVo::getTransferSubmitedPerson)
                 .selectAs(MaterialTaskAssign::getStatus, MaterialTaskWaitPageVo::getProcessStatus)
                 .leftJoin(XjrUser.class, XjrUser::getId, MaterialTask::getCreateUserId, ext -> ext.selectAs(XjrUser::getName, MaterialTaskWaitPageVo::getCreateUserName))
+                .leftJoin(MaterialTaskAppendix.class, MaterialTaskAppendix::getMaterialTaskId, MaterialTaskAssign::getId, ext -> ext.selectAs(MaterialTaskAppendix::getFileId, MaterialTaskWaitPageVo::getMaterialId))
         ;
 
 //        if (ObjectUtil.isNotNull(dto.getRequiredCompleteStareTime()) && ObjectUtil.isNotNull(dto.getRequiredCompleteEndTime())) {
@@ -258,4 +258,13 @@ public class MaterialTaskController {
     public RT<List<MaterialTaskAssignListVo>> assignList(@Valid MaterialTaskAssignListDto dto) {
         return RT.ok(materialTaskService.assignList(dto));
     }
+
+    @GetMapping("/view-contents")
+    @ApiOperation(value = "查看填报的表单")
+    public R viewContent(@Valid ViewContentDto dto) {
+        return R.ok(formExecuteService.getInfoByTemplateId(new FormExecuteInfoDto(){{
+            setTemplateId(dto.getTemplateId());
+            setId(dto.getId());
+        }}));
+    }
 }

+ 3 - 6
src/main/java/com/xjrsoft/module/material/controller/MaterialTypeController.java

@@ -18,13 +18,11 @@ import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.app.dto.UpdateEnableMarkDto;
+import com.xjrsoft.module.form.dto.FormExecuteInfoDto;
 import com.xjrsoft.module.form.entity.FormTemplate;
+import com.xjrsoft.module.form.service.IFormExecuteService;
 import com.xjrsoft.module.form.service.IFormTemplateService;
-import com.xjrsoft.module.material.dto.AddMaterialTypeAssignDto;
-import com.xjrsoft.module.material.dto.AddMaterialTypeDto;
-import com.xjrsoft.module.material.dto.MaterialTypeAssignPageDto;
-import com.xjrsoft.module.material.dto.MaterialTypePageDto;
-import com.xjrsoft.module.material.dto.UpdateMaterialTypeDto;
+import com.xjrsoft.module.material.dto.*;
 import com.xjrsoft.module.material.entity.MaterialType;
 import com.xjrsoft.module.material.entity.MaterialTypeAssign;
 import com.xjrsoft.module.material.service.IMaterialTypeAssignService;
@@ -99,7 +97,6 @@ public class MaterialTypeController {
         return RT.ok(materialTypeVo);
     }
 
-
     @PostMapping
     @ApiOperation(value = "新增材料提交任务类型")
     @SaCheckPermission("materialtype:add")

+ 19 - 0
src/main/java/com/xjrsoft/module/material/dto/MaterialTaskAssignAppendixDto.java

@@ -3,7 +3,9 @@ package com.xjrsoft.module.material.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
 import java.util.List;
+import java.util.Map;
 
 @Data
 public class MaterialTaskAssignAppendixDto {
@@ -13,6 +15,23 @@ public class MaterialTaskAssignAppendixDto {
     @ApiModelProperty("材料提交任务分配对象ID")
     private Long materialTaskAssignId;
 
+    /**
+     * 任务类型(可多选 xjr_dictionary_detail[material_category])
+     */
+    @ApiModelProperty("任务类型(可多选 xjr_dictionary_detail[material_category])")
+    private String materialCategory;
+
+    /**
+     * 表单模板id
+     */
+    @NotNull(message = "表单模板id")
+    private Long templateId;
+
+    /**
+     * 自定义表单 表单数据
+     */
+    private Map<String,Object> formData;
+
     /**
      * materialTaskAppendix
      */

+ 22 - 0
src/main/java/com/xjrsoft/module/material/dto/ViewContentDto.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.material.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+public class ViewContentDto {
+    /**
+     * 主键id
+     */
+    @NotBlank(message = "自定义表单 数据id 不能为空")
+    @ApiModelProperty("自定义表单 数据的主键id")
+    private String id;
+
+    /**
+     * 表单模板id
+     */
+    @ApiModelProperty("自定义表单 表单模板id")
+    private Long templateId;
+}

+ 10 - 9
src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskAssignServiceImpl.java

@@ -90,15 +90,16 @@ public class MaterialTaskAssignServiceImpl   extends MPJBaseServiceImpl<Material
                     materialTaskAssign.setOpinion(dto.getOpinion());
                     if (dto.getStatus() == 1) {
                         materialTaskAssign.setStatus(3);
-                        materialTaskAssign.setStatus(dto.getStatus() == 1 ? 3 : 4);
-                        if (dto.getExecutiveStatus() == 1) {
-                            materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
-                            materialTaskAssign.setExecutiveStatus(2);
-                        } else {
-                            materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
-                            materialTaskAssign.setExecutiveStatus(3);
-                        }
-                    } else {
+                        //materialTaskAssign.setStatus(dto.getStatus() == 1 ? 3 : 4);
+//                        if (dto.getExecutiveStatus() == 1) {
+//                            materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
+//                            materialTaskAssign.setExecutiveStatus(2);
+//                        } else {
+//                            materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
+//                            materialTaskAssign.setExecutiveStatus(3);
+//                        }
+                    }
+                    if (dto.getStatus() == 2) {
                         materialTaskAssign.setStatus(4);
                     }
 

+ 73 - 24
src/main/java/com/xjrsoft/module/material/service/impl/MaterialTaskServiceImpl.java

@@ -13,6 +13,8 @@ import com.xjrsoft.common.enums.MaterialCategoryEnum;
 import com.xjrsoft.common.utils.RedisUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.config.CommonPropertiesConfig;
+import com.xjrsoft.module.form.dto.FormExecuteAddOrUpdateDto;
+import com.xjrsoft.module.form.service.IFormExecuteService;
 import com.xjrsoft.module.material.dto.*;
 import com.xjrsoft.module.material.entity.*;
 import com.xjrsoft.module.material.mapper.MaterialTaskAppendixMapper;
@@ -58,6 +60,8 @@ public class MaterialTaskServiceImpl extends MPJBaseServiceImpl<MaterialTaskMapp
     private final IMaterialTypeService materialTypeService;
     private final IWeChatService weChatService;
 
+    private final IFormExecuteService formExecuteService;
+
     private final CommonPropertiesConfig commonPropertiesConfig;
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -66,7 +70,7 @@ public class MaterialTaskServiceImpl extends MPJBaseServiceImpl<MaterialTaskMapp
         //新增任务
         materialTask.setStatus(2);
         if(dto.getUserList() == null && !dto.getUserList().isEmpty()){
-            materialTask.setSubmitedPerson(dto.getUserList().size());
+            materialTask.setAssignPerson(dto.getUserList().size());
         }
         materialTaskMaterialTaskMapper.insert(materialTask);
         //新增任务人
@@ -178,39 +182,84 @@ public class MaterialTaskServiceImpl extends MPJBaseServiceImpl<MaterialTaskMapp
     @Transactional(rollbackFor = Exception.class)
     public Boolean submited(MaterialTaskAssignAppendixDto materialTaskAssignAppendixDto) {
 
-        if (materialTaskAssignAppendixDto.getMaterialTaskAppendixList() != null && materialTaskAssignAppendixDto.getMaterialTaskAppendixList().size() > 0) {
+        if(materialTaskAssignAppendixDto.getMaterialCategory().equals(MaterialCategoryEnum.MT0001.getCode())){
+            if (materialTaskAssignAppendixDto.getMaterialTaskAppendixList() != null && materialTaskAssignAppendixDto.getMaterialTaskAppendixList().size() > 0) {
 
-            MaterialTaskAssign materialTaskAssign = materialTaskMaterialTaskAssignMapper.selectByIdDeep(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
-            Integer oldStatus = materialTaskAssign.getStatus();
-            materialTaskAssign.setStatus(2);
+                MaterialTaskAssign materialTaskAssign = materialTaskMaterialTaskAssignMapper.selectByIdDeep(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
+                Integer oldStatus = materialTaskAssign.getStatus();
+                materialTaskAssign.setStatus(2);
 
-            if (oldStatus == 1) {
-                MaterialTask materialTask = materialTaskMaterialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
+                if (oldStatus == 1) {
+                    MaterialTask materialTask = materialTaskMaterialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
 
-                LocalDate requiredCompleteTime = materialTask.getRequiredCompleteTime();
-                LocalDate today = materialTask.getRequiredCompleteTime();
+                    LocalDate requiredCompleteTime = materialTask.getRequiredCompleteTime();
+                    LocalDate today = LocalDate.now();
 
-                int comparison = today.compareTo(requiredCompleteTime);
-                if (comparison > 0) {//超时提交
-                    materialTaskAssign.setExecutiveStatus(3);
-                    materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
-                } else {//准时提交(包含当天)
-                    materialTaskAssign.setExecutiveStatus(2);
-                    materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
+                    int comparison = today.compareTo(requiredCompleteTime);
+                    if (comparison > 0) {//超时提交
+                        materialTaskAssign.setExecutiveStatus(3);
+                        materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
+                    } else {//准时提交(包含当天)
+                        materialTaskAssign.setExecutiveStatus(2);
+                        materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
+                    }
+                    materialTask.setSubmitedPerson(materialTask.getSubmitedPerson() + 1);
+                    materialTaskMaterialTaskMapper.updateById(materialTask);
+                }
+                materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign);
+
+                if (oldStatus == 4) { // 重做删除原来的
+                    materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssignAppendixDto.getMaterialTaskAssignId()));
                 }
-                materialTask.setSubmitedPerson(materialTask.getSubmitedPerson() + 1);
-                materialTaskMaterialTaskMapper.updateById(materialTask);
-            }
-            materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign);
 
-            if (oldStatus == 4) { // 重做删除原来的
-                materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssignAppendixDto.getMaterialTaskAssignId()));
+                for (AddMaterialTaskAppendixDto materialTaskAppendixDto : materialTaskAssignAppendixDto.getMaterialTaskAppendixList()) {
+                    MaterialTaskAppendix materialTaskAppendix = new MaterialTaskAppendix();
+                    materialTaskAppendix.setMaterialTaskId(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
+                    materialTaskAppendix.setFileId(materialTaskAppendixDto.getFileId());
+                    materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix);
+                }
             }
+        }
+
+        if(materialTaskAssignAppendixDto.getMaterialCategory().equals(MaterialCategoryEnum.MT0002.getCode())){
+            if (materialTaskAssignAppendixDto.getTemplateId() != null && !materialTaskAssignAppendixDto.getFormData().isEmpty()) {
+
+                MaterialTaskAssign materialTaskAssign = materialTaskMaterialTaskAssignMapper.selectByIdDeep(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
+                Integer oldStatus = materialTaskAssign.getStatus();
+                materialTaskAssign.setStatus(2);
+
+                //状态 1=未提交 2=待审核 3=通过 4=重做
+                if (oldStatus == 1) {
+                    MaterialTask materialTask = materialTaskMaterialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
+
+                    LocalDate requiredCompleteTime = materialTask.getRequiredCompleteTime();
+                    LocalDate today = LocalDate.now();
+
+                    int comparison = today.compareTo(requiredCompleteTime);
+                    if (comparison > 0) {//超时提交
+                        materialTaskAssign.setExecutiveStatus(3);
+                        materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
+                    } else {//准时提交(包含当天)
+                        materialTaskAssign.setExecutiveStatus(2);
+                        materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
+                    }
+                    materialTask.setSubmitedPerson(materialTask.getSubmitedPerson() + 1);
+                    materialTaskMaterialTaskMapper.updateById(materialTask);
+                }
+                materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign);
+
+                if (oldStatus == 4) { // 重做删除原来的
+                    materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssignAppendixDto.getMaterialTaskAssignId()));
+                }
+
+                long id = formExecuteService.addByTemplateId(new FormExecuteAddOrUpdateDto(){{
+                    setReleaseId(materialTaskAssignAppendixDto.getTemplateId());
+                    setFormData(materialTaskAssignAppendixDto.getFormData());
+                }});
 
-            for (AddMaterialTaskAppendixDto materialTaskAppendixDto : materialTaskAssignAppendixDto.getMaterialTaskAppendixList()) {
                 MaterialTaskAppendix materialTaskAppendix = new MaterialTaskAppendix();
                 materialTaskAppendix.setMaterialTaskId(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
-                materialTaskAppendix.setFileId(materialTaskAppendixDto.getFileId());
+                materialTaskAppendix.setFileId(id);
                 materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix);
             }
         }

+ 2 - 5
src/main/java/com/xjrsoft/module/material/service/impl/MaterialTypeServiceImpl.java

@@ -267,14 +267,11 @@ public class MaterialTypeServiceImpl extends MPJBaseServiceImpl<MaterialTypeMapp
     }
 
     private FormTemplate getFormTemplateById(Long formReleaseId) {
-        MPJLambdaWrapper<FormTemplate> formTemplateLambdaQueryWrapper = new MPJLambdaWrapper<>();
+        LambdaQueryWrapper<FormTemplate> formTemplateLambdaQueryWrapper = new LambdaQueryWrapper<>();
         formTemplateLambdaQueryWrapper
-                .disableSubLogicDel()
-                .disableLogicDel()
                 .orderByDesc(FormTemplate::getSortCode)
                 .select(FormTemplate.class, x -> VoToColumnUtil.fieldsToColumns(FormTemplate.class).contains(x.getProperty()))
-                .leftJoin(FormRelease.class, FormRelease::getFormId, FormTemplate::getId)
-                .eq(FormRelease::getId, formReleaseId);
+                .eq(FormTemplate::getId, formReleaseId);
         return formTemplateService.getOne(formTemplateLambdaQueryWrapper);
     }
 }

+ 5 - 1
src/main/java/com/xjrsoft/module/material/vo/MaterialTaskAssignListVo.java

@@ -80,7 +80,11 @@ public class MaterialTaskAssignListVo {
      */
     @ApiModelProperty("表单发布")
     private String formReleaseIdCn;
-
+    /**
+     * 表单数据id
+     */
+    @ApiModelProperty("表单数据id")
+    private Long formDataId;
 
     /**
      * 用户名字

+ 6 - 0
src/main/java/com/xjrsoft/module/material/vo/MaterialTaskWaitPageVo.java

@@ -107,4 +107,10 @@ public class MaterialTaskWaitPageVo {
      */
     @ApiModelProperty("任务类型(可多选 xjr_dictionary_detail[material_category])")
     private String materialCategory;
+
+    /**
+     * 文件模板
+     */
+    @ApiModelProperty("文件模板")
+    private Long materialId;
 }

+ 8 - 0
src/main/java/com/xjrsoft/module/room/controller/RoomBedAdjustController.java

@@ -133,4 +133,12 @@ public class RoomBedAdjustController {
         Boolean result = roomBedService.adjustBed(dto);
         return RT.ok(result);
     }
+
+    @PutMapping("/adjustBedBatch")
+    @ApiOperation(value = "批量修改学生的寝室床位")
+    @SaCheckPermission("roomBedAdjust:edit")
+    public RT<Boolean> adjustBedBatch(@Valid @RequestBody List<AdjustStudentBedDto> dto){
+        Boolean result = roomBedService.adjustBedBatch(dto);
+        return RT.ok(result);
+    }
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/room/mapper/RoomBedMapper.java

@@ -137,4 +137,10 @@ public interface RoomBedMapper extends MPJBaseMapper<RoomBed> {
      */
     List<StudentPayStatusVo> getStudentPayStatus(@Param("dto") DistributeRoomBedDto dto);
 
+    /**
+     * 查询班级id、名称和班主任信息
+     * @param dto
+     * @return
+     */
+    List<AdjustBedClassPageVo> getClassTeacherInfo(@Param("dto") AdjustClassPageDto dto);
 }

+ 11 - 0
src/main/java/com/xjrsoft/module/room/service/IRoomBedService.java

@@ -94,8 +94,19 @@ public interface IRoomBedService extends MPJBaseService<RoomBed> {
      */
     Page<NoBedStudentPageVo> getNoBedStudent(Page<AdjustBedPageDto> page, AdjustBedPageDto dto);
 
+    /**
+     * 单个学生调整床位
+     * @param dto
+     */
     Boolean adjustBed(AdjustStudentBedDto dto);
 
 
+    /**
+     * 批量学生调整床位
+     * @param dtoList 批量传入学生id和床位id
+     */
+    Boolean adjustBedBatch(List<AdjustStudentBedDto> dtoList);
+
+
 
 }

+ 118 - 9
src/main/java/com/xjrsoft/module/room/service/impl/RoomBedServiceImpl.java

@@ -11,6 +11,7 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.MPJWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.enums.GenderDictionaryEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
@@ -421,20 +422,15 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
 
     @Override
     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> classList = roomBedMapper.getClassTeacherInfo(dto);
         List<AdjustBedClassPageVo> result = new ArrayList<>();
         List<AdjustBedClassStudentPageVo> allStudent = roomBedMapper.getClassStudetBed(dto);
 
         //查询缴费状态
         DistributeRoomBedDto distributeRoomBedDto = new DistributeRoomBedDto();
         List<Long> classIds = new ArrayList<>();
-        for (BaseClass baseClass : classList) {
-            classIds.add(baseClass.getId());
+        for (AdjustBedClassPageVo baseClass : classList) {
+            classIds.add(Long.parseLong(baseClass.getId()));
         }
         if(!classIds.isEmpty()){
             distributeRoomBedDto.setClassIds(classIds);
@@ -449,7 +445,7 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
             }
             payStatusMap.put(statusVo.getId(), payStatus);
         }
-        for (BaseClass classOne : classList) {
+        for (AdjustBedClassPageVo classOne : classList) {
             List<AdjustBedClassStudentPageVo> studentList = new ArrayList<>();
             for (AdjustBedClassStudentPageVo adjustBedClassStudentPageVo : allStudent) {
                 if(!classOne.getId().toString().equals(adjustBedClassStudentPageVo.getClassId())){
@@ -542,4 +538,117 @@ public class RoomBedServiceImpl extends MPJBaseServiceImpl<RoomBedMapper, RoomBe
 
         return true;
     }
+
+    /**
+     * 1、先做性别校验,如果学生性别和入住寝室的性别不一致,不进行数据保存并返回学生的姓名到前端
+     * 2、参数中可能存在学生id不为空,床位id为空的,根据学生id清空学生相应的床位信息
+     * 3、如果一个学生被安排了多个床位,需要新增提示
+     * @param dtoList
+     * @return
+     */
+    @Override
+    public Boolean adjustBedBatch(List<AdjustStudentBedDto> dtoList) {
+        //存分配到女生寝室的男生名字
+        List<String> boyStudents = new ArrayList<>();
+        //存分配到男生寝室的女生名字
+        List<String> girlStudents = new ArrayList<>();
+        //需要清空床位的学生
+        List<AdjustStudentBedDto> todoStudents = new ArrayList<>();
+
+        Map<Long, Long> bedStudentMap = new HashMap<>();
+        Map<Long, String> studentNameMap = new HashMap<>();
+        for (AdjustStudentBedDto dto : dtoList) {
+            if(dto.getStudentUserId() != null && dto.getBedId() != null){
+                bedStudentMap.put(dto.getBedId(), dto.getStudentUserId());
+                //查询学生的性别
+                XjrUser xjrUser = xjrUserMapper.selectById(dto.getStudentUserId());
+                studentNameMap.put(dto.getStudentUserId(), xjrUser.getName());
+
+                String studentGender = xjrUser.getGender();
+
+                RoomBed roomBedInfo = roomBedMapper.selectById(dto.getBedId());
+                Room room = roomMapper.selectById(roomBedInfo.getRoomId());
+                if(!room.getGender().equals(studentGender)){
+                    if(GenderDictionaryEnum.MALE.getCode().equals(room.getGender())){//男生
+                        boyStudents.add(xjrUser.getName());
+                    }else if(GenderDictionaryEnum.FEMALE.getCode().equals(room.getGender())){//女生
+                        girlStudents.add(xjrUser.getName());
+                    }
+                    continue;
+                }
+                //校验通过
+                todoStudents.add(dto);
+            }
+        }
+        //存被安排了多个床位的学生
+        List<String> moreBedStudents = new ArrayList<>();
+        for (Map.Entry<Long, Long> entry : bedStudentMap.entrySet()) {
+            Long value = entry.getValue();
+
+            if (bedStudentMap.entrySet().stream().filter(e -> e.getValue().equals(value)).count() > 1) {
+                moreBedStudents.add(studentNameMap.get(value));
+            }
+        }
+
+        //存这次处理过的寝室,查看是否需要设置为混合寝室
+        List<Long> roomIds = new ArrayList<>();
+        if(boyStudents.isEmpty() && girlStudents.isEmpty() && moreBedStudents.isEmpty()){
+            for (AdjustStudentBedDto todoStudent : todoStudents) {
+                //先清空原来的床位
+                UpdateWrapper<RoomBed> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.eq("student_user_id", todoStudent.getStudentUserId());
+                updateWrapper.setSql("student_user_id = null");
+                updateWrapper.setSql("is_check_in = 0");
+                List<RoomBed> roomBedList = roomBedMapper.selectList(new QueryWrapper<RoomBed>().lambda().eq(RoomBed::getStudentUserId, todoStudent.getStudentUserId()));
+                for (RoomBed roomBed : roomBedList) {
+                    roomBedMapper.update(roomBed, updateWrapper);
+                    roomIds.add(roomBed.getRoomId());
+                }
+                //再把学生保存到新的床位
+                roomBedMapper.updateById(new RoomBed(){{
+                    setId(todoStudent.getBedId());
+                    setStudentUserId(todoStudent.getStudentUserId());
+                }});
+            }
+            //如果寝室的人是多个班级,将混合寝室改为是
+            List<RoomClassCountVo> classCountVoList = roomMapper.getRoomClassCount(roomIds);
+            for (RoomClassCountVo roomClassCountVo : classCountVoList) {
+                if(roomClassCountVo.getClassCount() > 1){
+                    Room updRoom = roomMapper.selectById(roomClassCountVo.getId());
+                    updRoom.setIsMax(1);
+                    roomMapper.updateById(updRoom);
+                }
+            }
+        }else{
+            String boyMsg = "学生";
+            for (int i = 0; i < boyStudents.size(); i ++){
+                if(i > 0){
+                    boyMsg += "、";
+                }
+                boyMsg += boyStudents.get(i);
+            }
+            boyMsg += "被分配到女生寝室";
+
+            String girlMsg = "学生";
+            for (int i = 0; i < girlStudents.size(); i ++){
+                if(i > 0){
+                    girlMsg += "、";
+                }
+                girlMsg += girlStudents.get(i);
+            }
+            girlMsg += "被分配到女生寝室";
+
+            String moreBedMsg = "学生";
+            for (int i = 0; i < moreBedStudents.size(); i ++){
+                if(i > 0){
+                    moreBedMsg += "、";
+                }
+                moreBedMsg += moreBedStudents.get(i);
+            }
+            moreBedMsg += "被分配多个床位";
+            throw new MyException(boyMsg + ";" + girlMsg + ";" + moreBedMsg);
+        }
+        return true;
+    }
+
 }

+ 7 - 0
src/main/java/com/xjrsoft/module/room/vo/AdjustBedClassPageVo.java

@@ -29,4 +29,11 @@ public class AdjustBedClassPageVo {
     @ApiModelProperty("学生信息")
     private List<AdjustBedClassStudentPageVo> studentList;
 
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班主任id")
+    private String teacherId;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班主任名称")
+    private String teacherName;
 }

+ 8 - 0
src/main/java/com/xjrsoft/module/room/vo/AdjustBedStudentPageVo.java

@@ -62,4 +62,12 @@ public class AdjustBedStudentPageVo {
     @ApiModelProperty("年级名称")
     private String gradeName;
 
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班主任id")
+    private String teacherId;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班主任名称")
+    private String teacherName;
+
 }

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

@@ -21,7 +21,8 @@ import java.util.List;
 @AllArgsConstructor
 public class PbVXsxxsfytbServiceImpl extends MPJBaseServiceImpl<PbVXsxxsfytbMapper, PbVXsxxsfytb> implements IPbVXsxxsfytbService {
     @Override
-    public List<PersonalPortraitFeeInformationVo> listCostInformation(PersonalPortraitFeeInformationDto dto) {
+    public List<PersonalPortraitFeeInformationVo>
+    listCostInformation(PersonalPortraitFeeInformationDto dto) {
         return null;
     }
 }

+ 1 - 0
src/main/java/com/xjrsoft/module/student/vo/PersonalPortraitPersonalInfoVo.java

@@ -20,4 +20,5 @@ public class PersonalPortraitPersonalInfoVo extends StudentPersonalInfoVo{
 
     @ApiModelProperty("结余")
     private BigDecimal  cashSurplus;
+
 }

+ 14 - 1
src/main/resources/mapper/room/RoomBedMapper.xml

@@ -319,7 +319,7 @@
 
     <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,
-        t4.id as student_user_id,t2.is_max,t2.id as room_id,t8.name as class_name,t9.name as grade_name FROM room_bed t1
+        t4.id as student_user_id,t2.is_max,t2.id as room_id,t8.name as class_name,t9.name as grade_name,t10.id as teacher_id,t10.name as teacher_name 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
@@ -327,6 +327,7 @@
         LEFT JOIN base_student_school_roll t7 ON t4.id = t7.user_id
         left join base_class t8 on t7.class_id = t8.id
         LEFT JOIN base_grade t9 ON t7.grade_id = t9.id
+        left join xjr_user t10 on t8.teacher_id = t10.id
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
         <if test="dto.isEmptyRoom != null">
             <if test="dto.isEmptyRoom == 1">
@@ -396,4 +397,16 @@
             </foreach>
         </if>
     </select>
+
+    <select id="getClassTeacherInfo" parameterType="com.xjrsoft.module.room.dto.AdjustClassPageDto" resultType="com.xjrsoft.module.room.vo.AdjustBedClassPageVo">
+        SELECT t1.id,t1.name,t2.id AS teacher_id, t2.name AS teacher_name FROM base_class t1
+        LEFT JOIN xjr_user t2 ON t1.teacher_id = t2.id
+        WHERE t1.delete_mark = 0
+        <if test="dto.gradeId != null">
+            and t1.grade_id = #{dto.gradeId}
+        </if>
+        <if test="dto.classId != null">
+            and t1.id = #{dto.classId}
+        </if>
+    </select>
 </mapper>