Browse Source

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

fanxp 1 year ago
parent
commit
6587508693
27 changed files with 667 additions and 50 deletions
  1. 2 2
      src/main/java/com/xjrsoft/common/enums/RoomApplicantTypeEnum.java
  2. 111 0
      src/main/java/com/xjrsoft/module/dataexpert/controller/DataExpertTemplateController.java
  3. 42 0
      src/main/java/com/xjrsoft/module/dataexpert/dto/AddDataExpertTemplateDto.java
  4. 19 0
      src/main/java/com/xjrsoft/module/dataexpert/dto/DataExpertTemplatePageDto.java
  5. 24 0
      src/main/java/com/xjrsoft/module/dataexpert/dto/UpdateDataExpertTemplateDto.java
  6. 94 0
      src/main/java/com/xjrsoft/module/dataexpert/entity/DataExpertTemplate.java
  7. 16 0
      src/main/java/com/xjrsoft/module/dataexpert/mapper/DataExpertTemplateMapper.java
  8. 14 0
      src/main/java/com/xjrsoft/module/dataexpert/service/IDataExpertTemplateService.java
  9. 19 0
      src/main/java/com/xjrsoft/module/dataexpert/service/impl/DataExpertTemplateServiceImpl.java
  10. 73 0
      src/main/java/com/xjrsoft/module/dataexpert/vo/DataExpertTemplatePageVo.java
  11. 43 0
      src/main/java/com/xjrsoft/module/dataexpert/vo/DataExpertTemplateVo.java
  12. 50 0
      src/main/java/com/xjrsoft/module/liteflow/node/WfRoomApplicantNode.java
  13. 32 8
      src/main/java/com/xjrsoft/module/organization/controller/UserController.java
  14. 1 1
      src/main/java/com/xjrsoft/module/organization/dto/UploadSignDto.java
  15. 2 0
      src/main/java/com/xjrsoft/module/organization/vo/PendingCountDto.java
  16. 2 2
      src/main/java/com/xjrsoft/module/room/service/impl/WfRoomApplicantServiceImpl.java
  17. 0 5
      src/main/java/com/xjrsoft/module/student/entity/StudentChangeClass.java
  18. 16 10
      src/main/java/com/xjrsoft/module/system/controller/MenuController.java
  19. 3 0
      src/main/java/com/xjrsoft/module/system/mapper/XjrMenuDeptRelationMapper.java
  20. 31 14
      src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java
  21. 4 0
      src/main/java/com/xjrsoft/module/system/vo/MenuTreeVo.java
  22. 9 0
      src/main/java/com/xjrsoft/module/system/vo/MenuVo.java
  23. 24 0
      src/main/java/com/xjrsoft/module/system/vo/XjrMentDeptGroupVo.java
  24. 1 0
      src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java
  25. 3 3
      src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml
  26. 11 0
      src/main/resources/mapper/system/XjrMenuDeptRelationMapper.xml
  27. 21 5
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 2 - 2
src/main/java/com/xjrsoft/common/enums/RoomApplicantTypeEnum.java

@@ -10,12 +10,12 @@ public enum RoomApplicantTypeEnum {
     /**
      * 留宿
      * */
-    RaOvernightStay("ra_overnight_stay", "留宿"),
+    ToBeBoarder("to_be_boarder", "走转住"),
 
     /**
      * 不留宿
      * */
-    RaNoOvernightStay("ra_no_overnight_stay", "不留宿");
+    ToBeDayPupil("to_be_dayPupil", "住转走");
 
     final String code;
     final String value;

+ 111 - 0
src/main/java/com/xjrsoft/module/dataexpert/controller/DataExpertTemplateController.java

@@ -0,0 +1,111 @@
+package com.xjrsoft.module.dataexpert.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.dataexpert.dto.AddDataExpertTemplateDto;
+import com.xjrsoft.module.dataexpert.dto.DataExpertTemplatePageDto;
+import com.xjrsoft.module.dataexpert.dto.UpdateDataExpertTemplateDto;
+import com.xjrsoft.module.dataexpert.entity.DataExpertTemplate;
+import com.xjrsoft.module.dataexpert.service.IDataExpertTemplateService;
+import com.xjrsoft.module.dataexpert.vo.DataExpertTemplatePageVo;
+import com.xjrsoft.module.dataexpert.vo.DataExpertTemplateVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/dataexpert" + "/dataExpertTemplate")
+@Api(value = "/dataexpert"  + "/dataExpertTemplate",tags = "数据导出-数据模板代码")
+@AllArgsConstructor
+public class DataExpertTemplateController {
+
+
+    private final IDataExpertTemplateService dataExpertTemplateService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="数据导出-数据模板列表(分页)")
+    @SaCheckPermission("dataexperttemplate:detail")
+    public RT<PageOutput<DataExpertTemplatePageVo>> page(@Valid DataExpertTemplatePageDto dto){
+
+        LambdaQueryWrapper<DataExpertTemplate> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(DataExpertTemplate::getId)
+                .select(DataExpertTemplate.class,x -> VoToColumnUtil.fieldsToColumns(DataExpertTemplatePageVo.class).contains(x.getProperty()));
+        IPage<DataExpertTemplate> page = dataExpertTemplateService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<DataExpertTemplatePageVo> pageOutput = ConventPage.getPageOutput(page, DataExpertTemplatePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询数据导出-数据模板信息")
+    @SaCheckPermission("dataexperttemplate:detail")
+    public RT<DataExpertTemplateVo> info(@RequestParam Long id){
+        DataExpertTemplate dataExpertTemplate = dataExpertTemplateService.getById(id);
+        if (dataExpertTemplate == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(dataExpertTemplate, DataExpertTemplateVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增数据导出-数据模板")
+    @SaCheckPermission("dataexperttemplate:add")
+    public RT<Boolean> add(@Valid @RequestBody AddDataExpertTemplateDto dto){
+        DataExpertTemplate dataExpertTemplate = BeanUtil.toBean(dto, DataExpertTemplate.class);
+        boolean isSuccess = dataExpertTemplateService.save(dataExpertTemplate);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改数据导出-数据模板")
+    @SaCheckPermission("dataexperttemplate:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateDataExpertTemplateDto dto){
+
+        DataExpertTemplate dataExpertTemplate = BeanUtil.toBean(dto, DataExpertTemplate.class);
+        return RT.ok(dataExpertTemplateService.updateById(dataExpertTemplate));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除数据导出-数据模板")
+    @SaCheckPermission("dataexperttemplate:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(dataExpertTemplateService.removeBatchByIds(ids));
+    }
+
+    @GetMapping(value = "/field-info")
+    @ApiOperation(value="根据id查询数据导出-数据模板信息")
+    @SaCheckPermission("dataexperttemplate:detail")
+    public RT<DataExpertTemplateVo> getFieldInfo(@RequestParam Long id){
+        DataExpertTemplate dataExpertTemplate = dataExpertTemplateService.getById(id);
+        if (dataExpertTemplate == null) {
+            return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(dataExpertTemplate, DataExpertTemplateVo.class));
+    }
+
+}

+ 42 - 0
src/main/java/com/xjrsoft/module/dataexpert/dto/AddDataExpertTemplateDto.java

@@ -0,0 +1,42 @@
+package com.xjrsoft.module.dataexpert.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Data
+public class AddDataExpertTemplateDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 模板名称
+    */
+    @ApiModelProperty("模板名称")
+    private String name;
+    /**
+    * 数据源(data_expert_source)
+    */
+    @ApiModelProperty("数据源(data_expert_source)")
+    private Long dataExpertSourceId;
+    /**
+    * 字段配置
+    */
+    @ApiModelProperty("字段配置")
+    private String fieldJson;
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/dataexpert/dto/DataExpertTemplatePageDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.dataexpert.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 数据导出-数据模板分页查询入参
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DataExpertTemplatePageDto extends PageInput {
+
+
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/dataexpert/dto/UpdateDataExpertTemplateDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.dataexpert.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Data
+public class UpdateDataExpertTemplateDto extends AddDataExpertTemplateDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+}

+ 94 - 0
src/main/java/com/xjrsoft/module/dataexpert/entity/DataExpertTemplate.java

@@ -0,0 +1,94 @@
+package com.xjrsoft.module.dataexpert.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Data
+@TableName("data_expert_template")
+@ApiModel(value = "data_expert_template", description = "数据导出-数据模板")
+public class DataExpertTemplate implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableId
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 模板名称
+    */
+    @ApiModelProperty("模板名称")
+    private String name;
+    /**
+    * 数据源(data_expert_source)
+    */
+    @ApiModelProperty("数据源(data_expert_source)")
+    private Long dataExpertSourceId;
+    /**
+    * 字段配置
+    */
+    @ApiModelProperty("字段配置")
+    private String fieldJson;
+
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/dataexpert/mapper/DataExpertTemplateMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.dataexpert.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.dataexpert.entity.DataExpertTemplate;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Mapper
+public interface DataExpertTemplateMapper extends MPJBaseMapper<DataExpertTemplate> {
+
+}

+ 14 - 0
src/main/java/com/xjrsoft/module/dataexpert/service/IDataExpertTemplateService.java

@@ -0,0 +1,14 @@
+package com.xjrsoft.module.dataexpert.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.dataexpert.entity.DataExpertTemplate;
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+
+public interface IDataExpertTemplateService extends MPJBaseService<DataExpertTemplate> {
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/dataexpert/service/impl/DataExpertTemplateServiceImpl.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.dataexpert.service.impl;
+
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.dataexpert.entity.DataExpertTemplate;
+import com.xjrsoft.module.dataexpert.mapper.DataExpertTemplateMapper;
+import com.xjrsoft.module.dataexpert.service.IDataExpertTemplateService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+/**
+* @title: 数据导出-数据模板
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class DataExpertTemplateServiceImpl extends MPJBaseServiceImpl<DataExpertTemplateMapper, DataExpertTemplate> implements IDataExpertTemplateService {
+}

+ 73 - 0
src/main/java/com/xjrsoft/module/dataexpert/vo/DataExpertTemplatePageVo.java

@@ -0,0 +1,73 @@
+package com.xjrsoft.module.dataexpert.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* @title: 数据导出-数据模板分页列表出参
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Data
+public class DataExpertTemplatePageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long createUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Date createDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Date modifyDate;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer deleteMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 模板名称
+    */
+    @ApiModelProperty("模板名称")
+    private String name;
+    /**
+    * 数据源(data_expert_source)
+    */
+    @ApiModelProperty("数据源(data_expert_source)")
+    private Long dataExpertSourceId;
+    /**
+    * 字段配置
+    */
+    @ApiModelProperty("字段配置")
+    private String fieldJson;
+
+}

+ 43 - 0
src/main/java/com/xjrsoft/module/dataexpert/vo/DataExpertTemplateVo.java

@@ -0,0 +1,43 @@
+package com.xjrsoft.module.dataexpert.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 数据导出-数据模板表单出参
+* @Author dzx
+* @Date: 2024-04-19
+* @Version 1.0
+*/
+@Data
+public class DataExpertTemplateVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Integer sortCode;
+    /**
+    * 模板名称
+    */
+    @ApiModelProperty("模板名称")
+    private String name;
+    /**
+    * 数据源(data_expert_source)
+    */
+    @ApiModelProperty("数据源(data_expert_source)")
+    private Long dataExpertSourceId;
+    /**
+    * 字段配置
+    */
+    @ApiModelProperty("字段配置")
+    private String fieldJson;
+
+
+
+}

+ 50 - 0
src/main/java/com/xjrsoft/module/liteflow/node/WfRoomApplicantNode.java

@@ -0,0 +1,50 @@
+package com.xjrsoft.module.liteflow.node;
+
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.common.enums.RoomApplicantTypeEnum;
+import com.xjrsoft.common.enums.StudyStatusEnum;
+import com.xjrsoft.module.room.entity.WfRoomApplicant;
+import com.xjrsoft.module.room.mapper.WfRoomApplicantMapper;
+import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
+import com.xjrsoft.module.student.entity.StudentChangeClass;
+import com.xjrsoft.module.student.mapper.StudentChangeClassMapper;
+import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
+import com.yomahub.liteflow.core.NodeComponent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 学生住宿申请后,修改学籍信息中的就读方式
+ */
+@Component("wf_room_applicant_node")
+public class WfRoomApplicantNode extends NodeComponent {
+    @Autowired
+    private WfRoomApplicantMapper wfRoomApplicantMapper;
+    @Autowired
+    private IBaseStudentSchoolRollService studentSchoolRollService;
+    @Override
+    public void process() throws Exception {
+        // 获取表单中数据编号
+        Map<String, Object> params = this.getFirstContextBean();
+        Object value = util.getFormDatKey(params,"id");
+        Long formId = Convert.toLong(value);
+        if (formId != null) {
+            //查询出数据
+            WfRoomApplicant wfRoomApplicant = wfRoomApplicantMapper.selectById(formId);
+            BaseStudentSchoolRoll schoolRoll = studentSchoolRollService.getOne(
+                new QueryWrapper<BaseStudentSchoolRoll>().lambda()
+                .eq(BaseStudentSchoolRoll::getUserId, wfRoomApplicant.getApplicantUserId())
+            );
+            if(RoomApplicantTypeEnum.ToBeBoarder.getCode().equals(wfRoomApplicant.getRecedeType())){
+                schoolRoll.setStduyStatus(StudyStatusEnum.InResidence.getCode());
+            }else if(RoomApplicantTypeEnum.ToBeDayPupil.getCode().equals(wfRoomApplicant.getRecedeType())){
+                schoolRoll.setStduyStatus(StudyStatusEnum.AttendDaySchool.getCode());
+            }
+            //修改学生班级
+            studentSchoolRollService.updateById(schoolRoll);
+        }
+    }
+}

+ 32 - 8
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.secure.BCrypt;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -17,6 +18,7 @@ import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
 import com.xjrsoft.common.enums.GenderDictionaryEnum;
 import com.xjrsoft.common.enums.RoleEnum;
+import com.xjrsoft.common.enums.WorkflowIsRecycleType;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.model.result.R;
 import com.xjrsoft.common.model.result.RT;
@@ -75,10 +77,16 @@ import com.xjrsoft.module.oss.factory.OssFactory;
 import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
 import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.service.IFileService;
+import com.xjrsoft.module.workflow.constant.WorkflowConstant;
+import com.xjrsoft.module.workflow.entity.WorkflowExtra;
+import com.xjrsoft.module.workflow.mapper.WorkflowExtraMapper;
 import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.camunda.bpm.engine.HistoryService;
+import org.camunda.bpm.engine.history.HistoricProcessInstance;
+import org.camunda.bpm.engine.history.HistoricProcessInstanceQuery;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -126,6 +134,8 @@ public class UserController {
 
     private final CommonPropertiesConfig propertiesConfig;
 
+    private final WorkflowExtraMapper workflowExtraMapper;
+
     private final RedisUtil redisUtil;
 
     private final IFileService fileService;
@@ -136,6 +146,8 @@ public class UserController {
     private final IBaseClassService baseClassService;
     private final IWorkflowExecuteService workflowExecuteService;
 
+    private final HistoryService historyService;
+
 
     @GetMapping(value = "/list")
     @ApiOperation(value = "用户列表(不分页)")
@@ -347,6 +359,21 @@ public class UserController {
         PendingCountDto pendingCountDto = new PendingCountDto();
         pendingCountDto.setWfPendingCount(workflowExecuteService.pendingCount());
 
+        HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery()
+                .variableValueEquals(WorkflowConstant.PROCESS_START_USER_ID_KEY, StpUtil.getLoginIdAsLong())
+                .variableValueEquals(WorkflowConstant.PROCESS_ISRECYCLE_FLAG_KEY, WorkflowIsRecycleType.NO.getCode());
+        List<HistoricProcessInstance> historicProcessInstances = historicProcessInstanceQuery.orderByProcessInstanceStartTime().desc().list();
+
+        //获取到所有流程id
+        List<String> processIds = historicProcessInstances.stream().map(HistoricProcessInstance::getId).collect(Collectors.toList());
+        int myApplicationCount = 0;
+        for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
+            if (ObjectUtil.isNotNull(historicProcessInstance.getEndTime())) {
+                myApplicationCount ++;
+            }
+        }
+        pendingCountDto.setMyApplicationCount(myApplicationCount);
+
         return RT.ok(pendingCountDto);
     }
 
@@ -647,7 +674,7 @@ public class UserController {
         long loginIdAsLong = StpUtil.getLoginIdAsLong();
         User user = userService.getById(loginIdAsLong);
         user.setSignFolderId(dto.getFolderId());
-        user.setSignPassword(BCrypt.hashpw(dto.getSignPassword(), BCrypt.gensalt()));
+        user.setSignPassword(BCrypt.hashpw(dto.getPassword(), BCrypt.gensalt()));
 
         return RT.ok(userService.updateById(user));
     }
@@ -667,15 +694,12 @@ public class UserController {
         return RT.ok(list.get(0).getFileUrl());
     }
 
-    @GetMapping("/check-signpassword")
-    @ApiOperation(value = "验证登录者的签名密码")
-    public RT<Boolean> checkSignpassword(@Valid @RequestBody UploadSignDto dto) {
+    @GetMapping("/check-password")
+    @ApiOperation(value = "验证登录者的密码")
+    public RT<Boolean> checkSignpassword(@RequestParam String password) {
         long loginIdAsLong = StpUtil.getLoginIdAsLong();
         User user = userService.getById(loginIdAsLong);
-        if(user.getSignFolderId() != null && user.getSignFolderId() != dto.getFolderId()){
-            return RT.error("未上传签名");
-        }
-        if (!BCrypt.checkpw(dto.getSignPassword(), user.getSignPassword())) {
+        if (!BCrypt.checkpw(password, user.getPassword())) {
             return RT.error("密码填写错误!");
         }
         return RT.ok(true);

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

@@ -5,5 +5,5 @@ import lombok.Data;
 @Data
 public class UploadSignDto {
     private Long folderId;
-    private String signPassword;
+    private String password;
 }

+ 2 - 0
src/main/java/com/xjrsoft/module/organization/vo/PendingCountDto.java

@@ -13,4 +13,6 @@ public class PendingCountDto implements Serializable {
      * 流程待办数量
      */
     private long wfPendingCount;
+
+    private long myApplicationCount;
 }

+ 2 - 2
src/main/java/com/xjrsoft/module/room/service/impl/WfRoomApplicantServiceImpl.java

@@ -39,14 +39,14 @@ public class WfRoomApplicantServiceImpl extends MPJBaseServiceImpl<WfRoomApplica
 
             if(ObjectUtil.isNotNull(baseStudentSchoolRoll)){
                 //申请住校
-                if(wfRoomApplicant.getRecedeType().equals(RoomApplicantTypeEnum.RaOvernightStay.getCode())) {
+                if(wfRoomApplicant.getRecedeType().equals(RoomApplicantTypeEnum.ToBeBoarder.getCode())) {
                     baseStudentSchoolRollMapper.updateById(new BaseStudentSchoolRoll(){{
                         setId(baseStudentSchoolRoll.getId());
                         setStduyStatus(StudyStatusEnum.InResidence.getCode());
                     }});
                 }
 
-                if(wfRoomApplicant.getRecedeType().equals(RoomApplicantTypeEnum.RaNoOvernightStay.getCode())) {
+                if(wfRoomApplicant.getRecedeType().equals(RoomApplicantTypeEnum.ToBeDayPupil.getCode())) {
                     baseStudentSchoolRollMapper.updateById(new BaseStudentSchoolRoll(){{
                         setId(baseStudentSchoolRoll.getId());
                         setStduyStatus(StudyStatusEnum.AttendDaySchool.getCode());

+ 0 - 5
src/main/java/com/xjrsoft/module/student/entity/StudentChangeClass.java

@@ -70,11 +70,6 @@ public class StudentChangeClass implements Serializable {
     @TableField(fill = FieldFill.INSERT)
     private Integer enabledMark;
     /**
-    * 序号
-    */
-    @ApiModelProperty("序号")
-    private Integer sortCode;
-    /**
     * 转出班级id
     */
     @ApiModelProperty("转出班级id")

+ 16 - 10
src/main/java/com/xjrsoft/module/system/controller/MenuController.java

@@ -2,7 +2,6 @@ package com.xjrsoft.module.system.controller;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -45,7 +44,6 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -253,9 +251,12 @@ public class MenuController {
 
         //多选
         List<XjrMenuDeptRelation> menuDeptRelationsList = new ArrayList<>();
-        for (AddXjrMenuDeptRelationDto addXjrMenuDeptRelationDto : dto.getMenuDeptRelations()) {
-            menuDeptRelationsList.add(BeanUtil.toBean(addXjrMenuDeptRelationDto, XjrMenuDeptRelation.class));
+        if(dto.getMenuDeptRelations() != null){
+            for (AddXjrMenuDeptRelationDto addXjrMenuDeptRelationDto : dto.getMenuDeptRelations()) {
+                menuDeptRelationsList.add(BeanUtil.toBean(addXjrMenuDeptRelationDto, XjrMenuDeptRelation.class));
+            }
         }
+
         menuDeptRelationsList.forEach(XjrMenuDeptRelation -> XjrMenuDeptRelation.setMenuId(menu.getId()));
         xjrMenuDeptRelationService.remove(Wrappers.<XjrMenuDeptRelation>query().lambda().eq(XjrMenuDeptRelation::getMenuId, menu.getId()));
         xjrMenuDeptRelationService.saveBatch(menuDeptRelationsList);
@@ -317,9 +318,16 @@ public class MenuController {
         formList.forEach(menuForm -> menuForm.setMenuId(menu.getId()));
         menuFormService.remove(Wrappers.<MenuForm>query().lambda().eq(MenuForm::getMenuId, menu.getId()));
 
-        List<XjrMenuDeptRelation> menuDeptRelations = BeanUtil.copyToList(dto.getMenuDeptRelations(), XjrMenuDeptRelation.class);
-        menuDeptRelations.forEach(XjrMenuDeptRelation -> XjrMenuDeptRelation.setMenuId(menu.getId()));
-        xjrMenuDeptRelationService.remove(Wrappers.<XjrMenuDeptRelation>query().lambda().eq(XjrMenuDeptRelation::getMenuId, menu.getId()));
+        if(dto.getMenuDeptRelations() != null){
+            List<XjrMenuDeptRelation> menuDeptRelations = BeanUtil.copyToList(dto.getMenuDeptRelations(), XjrMenuDeptRelation.class);
+            menuDeptRelations.forEach(XjrMenuDeptRelation -> XjrMenuDeptRelation.setMenuId(menu.getId()));
+            xjrMenuDeptRelationService.remove(Wrappers.<XjrMenuDeptRelation>query().lambda().eq(XjrMenuDeptRelation::getMenuId, menu.getId()));
+
+            if (CollectionUtils.isNotEmpty(menuDeptRelations)) {
+                xjrMenuDeptRelationService.saveBatch(menuDeptRelations);
+            }
+        }
+
 
         if (CollectionUtils.isNotEmpty(menuButtons)) {
             menuButtonService.saveBatch(menuButtons);
@@ -330,9 +338,7 @@ public class MenuController {
         if (CollectionUtils.isNotEmpty(formList)) {
             menuFormService.saveBatch(formList);
         }
-        if (CollectionUtils.isNotEmpty(menuDeptRelations)) {
-            xjrMenuDeptRelationService.saveBatch(menuDeptRelations);
-        }
+
         return R.ok();
     }
 

+ 3 - 0
src/main/java/com/xjrsoft/module/system/mapper/XjrMenuDeptRelationMapper.java

@@ -7,6 +7,7 @@ import com.xjrsoft.module.evaluate.dto.EvaluateTemplatePageDto;
 import com.xjrsoft.module.evaluate.vo.EvaluateTemplatePageVo;
 import com.xjrsoft.module.system.dto.XjrMenuDeptRelationPageDto;
 import com.xjrsoft.module.system.entity.XjrMenuDeptRelation;
+import com.xjrsoft.module.system.vo.XjrMentDeptGroupVo;
 import com.xjrsoft.module.system.vo.XjrMenuDeptRelationPageVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -22,4 +23,6 @@ import java.util.List;
 @Mapper
 public interface XjrMenuDeptRelationMapper extends MPJBaseMapper<XjrMenuDeptRelation> {
     Page<XjrMenuDeptRelationPageVo> getPage(Page<XjrMenuDeptRelationPageDto> page,  @Param("list")List<String> list);
+
+    List<XjrMentDeptGroupVo> getMenuDept();
 }

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

@@ -21,6 +21,7 @@ import com.xjrsoft.module.system.entity.Subsystem;
 import com.xjrsoft.module.system.entity.XjrMenuQuick;
 import com.xjrsoft.module.system.mapper.AuthorizeMapper;
 import com.xjrsoft.module.system.mapper.MenuMapper;
+import com.xjrsoft.module.system.mapper.XjrMenuDeptRelationMapper;
 import com.xjrsoft.module.system.mapper.XjrMenuQuickMapper;
 import com.xjrsoft.module.system.service.IMenuService;
 import com.xjrsoft.module.system.vo.*;
@@ -49,6 +50,8 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
 
     private final XjrMenuQuickMapper menuQuickMapper;
 
+    private final XjrMenuDeptRelationMapper menuDeptRelationMapper;
+
     @Override
     public List<MenuVo> getAuthMenuList(MenuTreeDto dto) {
         List<Long> roleIds = getUserRoleIds();
@@ -189,21 +192,35 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
             }
             authMenuIdList = authorizeList.stream().map(Authorize::getObjectId).collect(Collectors.toList());
         }
+        List<MenuVo> menuVos = this.selectJoinList(MenuVo.class,
+            MPJWrappers.<Menu>lambdaJoin()
+            .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())
+            .in(CollectionUtils.isNotEmpty(authMenuIdList), Menu::getId, authMenuIdList)
+            .select(Menu::getId)
+            .select("1 as authorized")
+            .selectAs(Subsystem::getName, MenuVo::getSystemName)
+            .select(Menu.class, x -> VoToColumnUtil.fieldsToColumns(MenuTreeVo.class).contains(x.getProperty()))
+            .leftJoin(Subsystem.class, Subsystem::getId, Menu::getSystemId)
+            .eq(Menu::getEnabledMark, EnabledMark.ENABLED.getCode())
+            .orderByAsc(Menu::getSortCode)
+        );
+        List<XjrMentDeptGroupVo> menuDept = menuDeptRelationMapper.getMenuDept();
+        Map<Long, String> deptNameMap = new HashMap<>();
+        Map<Long, String> deptIdMap = new HashMap<>();
+        for (XjrMentDeptGroupVo deptGroupVo : menuDept) {
+            deptNameMap.put(deptGroupVo.getMenuId(), deptGroupVo.getDeptNames());
+            deptIdMap.put(deptGroupVo.getMenuId(), deptGroupVo.getDeptIds());
+        }
+        for (MenuVo menuVo : menuVos) {
+            menuVo.setDeptId(deptIdMap.get(menuVo.getId()));
+            menuVo.setDeptName(deptNameMap.get(menuVo.getId()));
+        }
 
-        return this.selectJoinList(MenuVo.class,
-                MPJWrappers.<Menu>lambdaJoin()
-                        .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())
-                        .in(CollectionUtils.isNotEmpty(authMenuIdList), Menu::getId, authMenuIdList)
-                        .select(Menu::getId)
-                        .selectAs(Subsystem::getName, MenuVo::getSystemName)
-                        .select(Menu.class, x -> VoToColumnUtil.fieldsToColumns(MenuTreeVo.class).contains(x.getProperty()))
-                        .leftJoin(Subsystem.class, Subsystem::getId, Menu::getSystemId)
-                        .eq(Menu::getEnabledMark, EnabledMark.ENABLED.getCode())
-                        .orderByAsc(Menu::getSortCode));
+        return menuVos;
     }
 
     /**

+ 4 - 0
src/main/java/com/xjrsoft/module/system/vo/MenuTreeVo.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.xjrsoft.common.enums.YesOrNoEnum;
 import com.xjrsoft.common.model.tree.ITreeNode;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -184,4 +185,7 @@ public class MenuTreeVo implements ITreeNode<MenuTreeVo,Long>, Serializable {
         }
         return parentId;
     }
+
+    @ApiModelProperty("是否有权限(1:是 0:否)")
+    private Integer authorized;
 }

+ 9 - 0
src/main/java/com/xjrsoft/module/system/vo/MenuVo.java

@@ -87,4 +87,13 @@ public class MenuVo implements Serializable {
     @ApiModelProperty("是否被选中")
     private Boolean isSelect;
 
+    @ApiModelProperty("是否有权限(1:是 0:否)")
+    private Integer authorized;
+
+    @ApiModelProperty("部门id")
+    private String deptId;
+
+    @ApiModelProperty("部门名称")
+    private String deptName;
+
 }

+ 24 - 0
src/main/java/com/xjrsoft/module/system/vo/XjrMentDeptGroupVo.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.system.vo;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 获取菜单树vo
+ * </p>
+ *
+ * @author tzx
+ * @since 2021-09-20
+ */
+@Data
+public class XjrMentDeptGroupVo implements  Serializable {
+
+    private Long menuId;
+
+    private String deptNames;
+
+    private String deptIds;
+}

+ 1 - 0
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -46,6 +46,7 @@ import com.xjrsoft.module.system.entity.File;
 import com.xjrsoft.module.system.entity.Stamp;
 import com.xjrsoft.module.system.service.IFileService;
 import com.xjrsoft.module.system.service.IStampService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.workflow.constant.WorkflowConstant;
 import com.xjrsoft.module.workflow.dto.*;
 import com.xjrsoft.module.workflow.entity.*;

+ 3 - 3
src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml

@@ -99,9 +99,9 @@
                t3.stduy_status                                                                                               as stduyStatusCode,
                t3.roll_modality                                                                                              as rollModalityCode,
                 t12.name AS student_form,
-               replace(IFNULL((SELECT jfzt FROM pb_v_xsxxsfytb WHERE Studentcode = t2.credential_number AND feeitemcode LIKE '999010604%' AND beltcode = #{dto.beltcode}),'欠费'),'未缴费','欠费') AS jxf,
-               replace(IFNULL((SELECT jfzt FROM pb_v_xsxxsfytb WHERE Studentcode = t2.credential_number AND feeitemcode = 103042766003001 AND beltcode = #{dto.beltcode}),'欠费'),'未缴费','欠费') AS ssf,
-               replace(IFNULL((SELECT jfzt FROM pb_v_xsxxsfytb WHERE Studentcode = t2.credential_number AND feeitemcode LIKE '999010603%' AND beltcode = #{dto.beltcode}),'欠费'),'未缴费','欠费') AS jcf,
+               REPLACE(IFNULL((SELECT jfzt FROM pb_v_xsxxsfytb WHERE Studentcode = t2.credential_number AND feeitemcode LIKE '999010604%' AND jfzt = '未缴费' LIMIT 1),'已缴费'),'未缴费','欠费') AS jxf,
+               REPLACE(IFNULL((SELECT jfzt FROM pb_v_xsxxsfytb WHERE Studentcode = t2.credential_number AND feeitemcode = 103042766003001 AND jfzt = '未缴费' LIMIT 1),'已缴费'),'未缴费','欠费') AS ssf,
+               REPLACE(IFNULL((SELECT jfzt FROM pb_v_xsxxsfytb WHERE Studentcode = t2.credential_number AND feeitemcode LIKE '999010603%' AND jfzt = '未缴费' LIMIT 1),'已缴费'),'未缴费','欠费') AS jcf,
                CONCAT(t17.name, ' ', t16.room_name, ' ', t15.bed_number) AS bed_info
         FROM base_student t1
                  INNER JOIN xjr_user t2 ON t1.user_id = t2.id

+ 11 - 0
src/main/resources/mapper/system/XjrMenuDeptRelationMapper.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xjrsoft.module.system.mapper.XjrMenuDeptRelationMapper">
+    <select id="getMenuDept" resultType="com.xjrsoft.module.system.vo.XjrMentDeptGroupVo">
+        SELECT t2.menu_id,GROUP_CONCAT(DISTINCT(t1.name)) as dept_names,GROUP_CONCAT(DISTINCT(t1.id)) as dept_ids  FROM xjr_department t1
+        INNER JOIN xjr_menu_dept_relation t2 ON t1.id = t2.dept_id
+        WHERE t1.delete_mark = 0 GROUP BY t2.menu_id
+    </select>
+</mapper>

+ 21 - 5
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -2860,13 +2860,29 @@ public class FreeMarkerGeneratorTest {
         mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
         tableConfigs.add(mainTable);
 
-        mainTable = new TableConfig();
-        mainTable.setTableName("data_expert_source_field");//init_sql中的表名
-        mainTable.setIsMain(false);//是否是主表,一般默认为true
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("dataexpert");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(false);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
+
+    @Test
+    public void gcDataExpertTemplate() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("data_expert_template");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
         mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
         mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
-        mainTable.setRelationField("data_expert_source_id");//设置外键
-        mainTable.setRelationTableField(GlobalConstant.DEFAULT_PK);//设置外键
         tableConfigs.add(mainTable);
 
         ApiGenerateCodesDto params = new ApiGenerateCodesDto();