Browse Source

会议申请台账

大数据与最优化研究所 2 weeks ago
parent
commit
51d5a5109c

+ 62 - 11
src/main/java/com/xjrsoft/module/oa/controller/WfMeetingApplyController.java

@@ -2,21 +2,20 @@ package com.xjrsoft.module.oa.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
-import com.xjrsoft.module.oa.dto.MeetingRoomListDto;
-import com.xjrsoft.module.oa.dto.WfMeetingApplyPageDto;
+import com.xjrsoft.module.oa.dto.*;
+import com.xjrsoft.module.oa.entity.MeetingConfereeOpinion;
+import com.xjrsoft.module.oa.entity.WfMeetingApply;
 import com.xjrsoft.module.oa.service.IWfMeetingApplyService;
-import com.xjrsoft.module.oa.vo.MeetingRoomListVo;
-import com.xjrsoft.module.oa.vo.WfMeetingApplyPageVo;
+import com.xjrsoft.module.oa.vo.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
@@ -35,16 +34,15 @@ public class WfMeetingApplyController {
 
     private final IWfMeetingApplyService wfMeetingApplyService;
 
-    @GetMapping(value = "/meeting_room_list")
+    @GetMapping(value = "/list_meeting_room")
     @ApiOperation(value="会议室列表(不分页)")
     @SaCheckPermission("wfmeetingapply:detail")
     @XjrLog(value = "会议室列表(分页)")
-    public RT<List<MeetingRoomListVo>> meetingRoomList(@Valid MeetingRoomListDto dto){
-        List<MeetingRoomListVo> meetingRoomListVoList = wfMeetingApplyService.meetingRoomList(dto);
+    public RT<List<MeetingRoomListVo>> listMeetingRoom(@Valid MeetingRoomListDto dto){
+        List<MeetingRoomListVo> meetingRoomListVoList = wfMeetingApplyService.listMeetingRoom(dto);
         return RT.ok(meetingRoomListVoList);
     }
 
-
     @GetMapping(value = "/page")
     @ApiOperation(value="列表(分页)")
     @SaCheckPermission("wfmeetingapply:detail")
@@ -55,7 +53,60 @@ public class WfMeetingApplyController {
         return RT.ok(pageOutput);
     }
 
+    @GetMapping(value = "/meeting_conferee_list")
+    @ApiOperation(value="参会人员列表(不分页)")
+    @SaCheckPermission("wfmeetingapply:detail")
+    @XjrLog(value = "参会人员列表(分页)")
+    public RT<List<MeetingConfereeListVo>> listMeetingConferee(@Valid MeetingConfereeListDto dto){
+        List<MeetingConfereeListVo> meetingConfereeListVoList = wfMeetingApplyService.listMeetingConferee(dto);
+        return RT.ok(meetingConfereeListVoList);
+    }
+
+    @GetMapping(value = "/meeting_conferee_opinion_list")
+    @ApiOperation(value="参会意见列表(不分页)")
+    @SaCheckPermission("wfmeetingapply:detail")
+    @XjrLog(value = "参会人员列表(分页)")
+    public RT<List<MeetingConfereeOpinionListVo>> listMeetingConfereeOpinion(@Valid MeetingConfereeOpinionListDto dto){
+        List<MeetingConfereeOpinionListVo> meetingConfereeOpinionListVos = wfMeetingApplyService.listMeetingConfereeOpinion(dto);
+        return RT.ok(meetingConfereeOpinionListVos);
+    }
+
+    @PutMapping(value = "/update_meetingSummary")
+    @ApiOperation(value = "编辑会议纪要")
+    @SaCheckPermission("wfmeetingapply:edit")
+    @XjrLog(value = "编辑会议纪要")
+    public RT<Boolean> updateMeetingSummary(@Valid @RequestBody UpdateMeetingSummaryDto dto){
+        WfMeetingApply wfMeetingApply = new WfMeetingApply();
+        wfMeetingApply.setId(dto.getId());
+        wfMeetingApply.setMeetingSummary(dto.getMeetingSummary());
+        return RT.ok(wfMeetingApplyService.updateById(wfMeetingApply));
+    }
+
+    @GetMapping(value = "/meetingSummary_info")
+    @ApiOperation(value="获取会议纪要")
+    @SaCheckPermission("wfmeetingapply:detail")
+    @XjrLog(value = "根据id查询信息")
+    public RT<MeetingSummaryVo> meetingSummaryInfo(@RequestParam Long id){
+        WfMeetingApply wfMeetingApply = wfMeetingApplyService.getById(id);
+        if (wfMeetingApply == null) {
+           return RT.error("找不到此数据!");
+        }
+        MeetingSummaryVo meetingSummaryVo = new MeetingSummaryVo();
+        meetingSummaryVo.setId(wfMeetingApply.getId());
+        meetingSummaryVo.setMeetingSummary(wfMeetingApply.getMeetingSummary());
+        return RT.ok(meetingSummaryVo);
+    }
 
+    @PutMapping(value = "/update_revocation_meeting")
+    @ApiOperation(value = "撤销会议申请")
+    @SaCheckPermission("wfmeetingapply:edit")
+    @XjrLog(value = "撤销会议申请")
+    public RT<Boolean> updateRevocationMeeting(@Valid @RequestBody UpdateRevocationMeetingDto dto){
+        WfMeetingApply wfMeetingApply = new WfMeetingApply();
+        wfMeetingApply.setId(dto.getId());
+        wfMeetingApply.setMeetingStatus(1);
+        return RT.ok(wfMeetingApplyService.updateById(wfMeetingApply));
+    }
 
 //    @GetMapping(value = "/info")
 //    @ApiOperation(value="根据id查询信息")

+ 22 - 0
src/main/java/com/xjrsoft/module/oa/dto/MeetingConfereeListDto.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+/**
+* @title: 会议参会人员列表(不分页)入参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class MeetingConfereeListDto {
+    /**
+     * 会议申请主键id(wf_meeting_apply)
+     */
+    @ApiModelProperty("会议申请主键id(wf_meeting_apply)")
+    private Long wfMeetingApplyId;
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/oa/dto/MeetingConfereeOpinionListDto.java

@@ -0,0 +1,19 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 会议参会人员意见表单(不分页)入参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class MeetingConfereeOpinionListDto {
+    /**
+     * 会议申请主键id(wf_meeting_apply)
+     */
+    @ApiModelProperty("会议申请主键id(wf_meeting_apply)")
+    private Long wfMeetingApplyId;
+}

+ 3 - 0
src/main/java/com/xjrsoft/module/oa/dto/MeetingRoomListDto.java

@@ -1,7 +1,9 @@
 package com.xjrsoft.module.oa.dto;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -20,6 +22,7 @@ public class MeetingRoomListDto {
      * 会议日期
      */
     @ApiModelProperty("会议日期")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate meetingApplyDate;
     /**
      * 会议开始时间

+ 29 - 0
src/main/java/com/xjrsoft/module/oa/dto/UpdateMeetingSummaryDto.java

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 编辑会议纪要
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class UpdateMeetingSummaryDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+
+    /**
+     * 会议纪要
+     */
+    @ApiModelProperty("会议纪要")
+    private String meetingSummary;
+}

+ 22 - 0
src/main/java/com/xjrsoft/module/oa/dto/UpdateRevocationMeetingDto.java

@@ -0,0 +1,22 @@
+package com.xjrsoft.module.oa.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+/**
+* @title: 撤销会议申请
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class UpdateRevocationMeetingDto {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long id;
+
+}

+ 19 - 0
src/main/java/com/xjrsoft/module/oa/dto/WfMeetingApplyPageDto.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.time.LocalDate;
 import java.time.LocalTime;
 import java.time.LocalDateTime;
 import java.math.BigDecimal;
@@ -22,5 +23,23 @@ import java.util.Date;
 @EqualsAndHashCode(callSuper = false)
 public class WfMeetingApplyPageDto extends PageInput {
 
+    @ApiModelProperty("会议日期开始")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate startMeetingApplyDate;
 
+    @ApiModelProperty("会议日期结束")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate endMeetingApplyDate;
+
+    @ApiModelProperty("主持人")
+    private String meetingApplyHostCn;
+
+    @ApiModelProperty("会议形式(xjr_dictionary_item(meeting_type))")
+    private String meetingApplyFormat;
+
+    @ApiModelProperty("会议主题")
+    private String meetingApplyTheme;
+
+    @ApiModelProperty("会议状态(0:未开始 1:已经撤销,2:已结束,3:进行中)")
+    private Integer meetingStatus;
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/oa/entity/MeetingConfereeOpinion.java

@@ -82,7 +82,7 @@ public class MeetingConfereeOpinion implements Serializable {
     * 意见
     */
     @ApiModelProperty("意见")
-    private String userId;
+    private String opinion;
 
 
 }

+ 13 - 4
src/main/java/com/xjrsoft/module/oa/entity/WfMeetingApply.java

@@ -25,11 +25,16 @@ public class WfMeetingApply implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-    * 
+    * 主键id
     */
-    @ApiModelProperty("")
+    @ApiModelProperty("主键id")
     @TableId
     private Long id;
+    /**
+     * 会议发起人主键id(xjr_user
+     */
+    @ApiModelProperty("会议发起人主键id(xjr_user")
+    private Long sponsorId;
     /**
     * 会议日期
     */
@@ -69,7 +74,7 @@ public class WfMeetingApply implements Serializable {
     * 主持人
     */
     @ApiModelProperty("主持人")
-    private String meetingApplyHost;
+    private Long meetingApplyHost;
     /**
     * 会议主题
     */
@@ -106,5 +111,9 @@ public class WfMeetingApply implements Serializable {
     @ApiModelProperty("会议状态(0:未开始 1:已经撤销,2:已结束)")
     private Integer meetingStatus;
 
-
+    /**
+     * 会议申请流程状态(0:未结束,1:已经结束,正常通过,2:已经结束,未正常通过)
+     */
+    @ApiModelProperty("会议申请流程状态(0:未结束,1:已经结束,正常通过,2:已经结束,未正常通过)")
+    private Integer workflowStatus;
 }

+ 9 - 1
src/main/java/com/xjrsoft/module/oa/service/IWfMeetingApplyService.java

@@ -2,9 +2,13 @@ package com.xjrsoft.module.oa.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.oa.dto.MeetingConfereeListDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeOpinionListDto;
 import com.xjrsoft.module.oa.dto.MeetingRoomListDto;
 import com.xjrsoft.module.oa.dto.WfMeetingApplyPageDto;
 import com.xjrsoft.module.oa.entity.WfMeetingApply;
+import com.xjrsoft.module.oa.vo.MeetingConfereeListVo;
+import com.xjrsoft.module.oa.vo.MeetingConfereeOpinionListVo;
 import com.xjrsoft.module.oa.vo.MeetingRoomListVo;
 import com.xjrsoft.module.oa.vo.WfMeetingApplyPageVo;
 
@@ -19,9 +23,13 @@ import java.util.List;
 
 public interface IWfMeetingApplyService extends MPJBaseService<WfMeetingApply> {
 
-    List<MeetingRoomListVo> meetingRoomList(MeetingRoomListDto dto);
+    List<MeetingRoomListVo> listMeetingRoom(MeetingRoomListDto dto);
 
     IPage<WfMeetingApplyPageVo> pageRabAndHand(WfMeetingApplyPageDto dto);
 
+    List<MeetingConfereeListVo> listMeetingConferee(MeetingConfereeListDto dto);
+
+    List<MeetingConfereeOpinionListVo> listMeetingConfereeOpinion(MeetingConfereeOpinionListDto dto);
+
     void noticeParticipants(Long id);
 }

+ 171 - 18
src/main/java/com/xjrsoft/module/oa/service/impl/WfMeetingApplyServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.oa.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -8,33 +9,39 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.MeetingTypeEnum;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseOfficeBuild;
+import com.xjrsoft.module.oa.dto.MeetingConfereeListDto;
+import com.xjrsoft.module.oa.dto.MeetingConfereeOpinionListDto;
 import com.xjrsoft.module.oa.dto.MeetingRoomListDto;
 import com.xjrsoft.module.oa.dto.WfMeetingApplyPageDto;
-import com.xjrsoft.module.oa.entity.MeetingConferee;
-import com.xjrsoft.module.oa.entity.MeetingRoom;
-import com.xjrsoft.module.oa.entity.WfMeetingApply;
+import com.xjrsoft.module.oa.entity.*;
 import com.xjrsoft.module.oa.mapper.MeetingConfereeMapper;
+import com.xjrsoft.module.oa.mapper.MeetingConfereeOpinionMapper;
 import com.xjrsoft.module.oa.mapper.MeetingRoomMapper;
 import com.xjrsoft.module.oa.mapper.WfMeetingApplyMapper;
 import com.xjrsoft.module.oa.service.IWfMeetingApplyService;
-import com.xjrsoft.module.oa.vo.MeetingRoomListVo;
-import com.xjrsoft.module.oa.vo.WfMeetingApplyPageVo;
+import com.xjrsoft.module.oa.vo.*;
 import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
 import com.xjrsoft.module.organization.entity.User;
 import com.xjrsoft.module.organization.service.IUserService;
 import com.xjrsoft.module.organization.service.IWeChatService;
+import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.workflow.entity.WorkflowExtra;
 import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
 import com.xjrsoft.module.workflow.mapper.WorkflowFormRelationMapper;
 import com.xjrsoft.module.workflow.service.IWorkflowExtraService;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
@@ -66,8 +73,10 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
 
     private final MeetingConfereeMapper meetingConfereeMapper;
 
+    private final MeetingConfereeOpinionMapper meetingConfereeOpinionMapper;
+
     @Override
-    public List<MeetingRoomListVo> meetingRoomList(MeetingRoomListDto dto) {
+    public List<MeetingRoomListVo> listMeetingRoom(MeetingRoomListDto dto) {
         // 处理时间
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
         LocalTime startTime =  LocalTime.parse(dto.getMeetingApplyS());
@@ -132,7 +141,130 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
 
     @Override
     public IPage<WfMeetingApplyPageVo> pageRabAndHand(WfMeetingApplyPageDto dto) {
-        return null;
+        // 权限设置
+        Long loginId = StpUtil.getLoginIdAsLong();
+        int permission =  1;
+        if(StpUtil.hasRole("")){
+            permission = 2;
+        }
+
+        // 当前时间
+        LocalDate nowLocalDate = LocalDate.now();
+        LocalTime nowLocalTime = LocalTime.now();
+
+        MPJLambdaWrapper<WfMeetingApply> wfMeetingApplyPageVoMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        wfMeetingApplyPageVoMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(WfMeetingApply::getId)
+                .select(WfMeetingApply.class, x -> VoToColumnUtil.fieldsToColumns(WfMeetingApplyPageVo.class).contains(x.getProperty()))
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfMeetingApply::getMeetingApplyFormat,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, WfMeetingApplyPageVo::getMeetingApplyFormatCn)
+                        )
+                .leftJoin(MeetingRoom.class, MeetingRoom::getId, WfMeetingApply::getMeetingRoomId,
+                        wrapper -> wrapper
+                                .selectAs(MeetingRoom::getName, WfMeetingApplyPageVo::getMeetingRoomIdCn)
+                )
+                .leftJoin(XjrUser.class, XjrUser::getId, WfMeetingApply::getMeetingApplyHost,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, WfMeetingApplyPageVo::getMeetingApplyHostCn)
+                                .like(StringUtils.isNotEmpty(dto.getMeetingApplyHostCn()), XjrUser::getName, dto.getMeetingApplyHostCn())
+                )
+                .eq(permission == 1, WfMeetingApply::getSponsorId, loginId)
+                .ge(ObjectUtils.isNotEmpty(dto.getStartMeetingApplyDate()), WfMeetingApply::getMeetingApplyDate, dto.getStartMeetingApplyDate())
+                .le(ObjectUtils.isNotEmpty(dto.getEndMeetingApplyDate()), WfMeetingApply::getMeetingApplyDate, dto.getEndMeetingApplyDate())
+                .eq(StringUtils.isNotEmpty(dto.getMeetingApplyFormat()), WfMeetingApply::getMeetingApplyFormat, dto.getMeetingApplyFormat())
+                .like(StringUtils.isNotEmpty(dto.getMeetingApplyTheme()), WfMeetingApply::getMeetingApplyTheme, dto.getMeetingApplyTheme())
+                ;
+        if(ObjectUtils.isNotEmpty(dto.getMeetingStatus()) && dto.getMeetingStatus() == 0){
+            wfMeetingApplyPageVoMPJLambdaWrapper
+                    .ge(WfMeetingApply::getMeetingApplyDate, nowLocalDate)
+                    .gt(WfMeetingApply::getMeetingApplyS, nowLocalTime)
+                    ;
+        }
+
+        if(ObjectUtils.isNotEmpty(dto.getMeetingStatus()) && dto.getMeetingStatus() == 1){
+            wfMeetingApplyPageVoMPJLambdaWrapper
+                    .eq(WfMeetingApply::getMeetingStatus, 1)
+            ;
+        }
+
+        if(ObjectUtils.isNotEmpty(dto.getMeetingStatus()) && dto.getMeetingStatus() == 2){
+            wfMeetingApplyPageVoMPJLambdaWrapper
+                    .le(WfMeetingApply::getMeetingApplyDate, nowLocalDate)
+                    .lt(WfMeetingApply::getMeetingApplyE, nowLocalTime)
+            ;
+        }
+
+        if(ObjectUtils.isNotEmpty(dto.getMeetingStatus()) && dto.getMeetingStatus() == 3){
+            wfMeetingApplyPageVoMPJLambdaWrapper
+                    .eq(WfMeetingApply::getMeetingApplyDate, nowLocalDate)
+                    .le(WfMeetingApply::getMeetingApplyS, nowLocalTime)
+                    .ge(WfMeetingApply::getMeetingApplyE, nowLocalTime)
+            ;
+        }
+
+        IPage<WfMeetingApplyPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), WfMeetingApplyPageVo.class, wfMeetingApplyPageVoMPJLambdaWrapper);
+
+        // 判断会议状态
+        for (WfMeetingApplyPageVo vo : page.getRecords()){
+            if (vo.getMeetingStatus() != 1) {
+                if (vo.getMeetingApplyDate().isBefore(nowLocalDate)) {
+                    vo.setMeetingStatus(2);
+                } else if (vo.getMeetingApplyDate().isAfter(nowLocalDate)) {
+                    vo.setMeetingStatus(1);
+                } else {
+                    if (vo.getMeetingApplyE().isBefore(nowLocalTime)) {
+                        vo.setMeetingStatus(2);
+                    } else if (vo.getMeetingApplyS().isAfter(nowLocalTime)) {
+                        vo.setMeetingStatus(1);
+                    } else {
+                        vo.setMeetingStatus(3);
+                    }
+                }
+            }
+        }
+
+        return page;
+    }
+
+    @Override
+    public List<MeetingConfereeListVo> listMeetingConferee(MeetingConfereeListDto dto) {
+        MPJLambdaWrapper<MeetingConferee> meetingConfereeMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        meetingConfereeMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(MeetingConferee::getId)
+                .select(MeetingConferee.class, x -> VoToColumnUtil.fieldsToColumns(MeetingConfereeListVo.class).contains(x.getProperty()))
+                .leftJoin(XjrUser.class, XjrUser::getId, MeetingConferee::getUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, MeetingConfereeListVo::getUserIdCn)
+                                .selectAs(XjrUser::getUserName, MeetingConfereeListVo::getUserName)
+                )
+                .eq(MeetingConferee::getWfMeetingApplyId, dto.getWfMeetingApplyId())
+        ;
+
+        return meetingConfereeMapper.selectJoinList(MeetingConfereeListVo.class, meetingConfereeMPJLambdaWrapper);
+    }
+
+    @Override
+    public List<MeetingConfereeOpinionListVo> listMeetingConfereeOpinion(MeetingConfereeOpinionListDto dto) {
+        MPJLambdaWrapper<MeetingConfereeOpinion> meetingConfereeOpinionMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        meetingConfereeOpinionMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(MeetingConfereeOpinion::getId)
+                .selectAs(MeetingConferee::getUserId, MeetingConfereeOpinionListVo::getUserId)
+                .select(MeetingConfereeOpinion.class, x -> VoToColumnUtil.fieldsToColumns(MeetingConfereeOpinionListVo.class).contains(x.getProperty()))
+                .innerJoin(MeetingConferee.class,
+                        wrapper -> wrapper
+                                .eq(MeetingConferee::getId, MeetingConfereeOpinion::getMeetingConfereeId)
+                                .eq(MeetingConferee::getWfMeetingApplyId, dto.getWfMeetingApplyId())
+                )
+                .leftJoin(XjrUser.class, XjrUser::getId, MeetingConferee::getUserId,
+                        wrapper -> wrapper
+                                .selectAs(XjrUser::getName, MeetingConfereeListVo::getUserIdCn)
+                )
+                ;
+        return meetingConfereeOpinionMapper.selectJoinList(MeetingConfereeOpinionListVo.class, meetingConfereeOpinionMPJLambdaWrapper);
     }
 
     @Override
@@ -142,9 +274,11 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
         wrapper
                 .disableSubLogicDel()
                 .select(WfMeetingApply::getId)
-                .selectAs(MeetingRoom::getName, WfMeetingApply::getMeetingSummary)
+                .selectAs(MeetingRoom::getName, WfMeetingApply::getMeetingSummary) // 将会议室的名称暂时放在会议纪要字段中
+                .selectAs(XjrUser::getName, WfMeetingApply::getMonogramTheme) // 将会议发起人名称暂时放在会标主题字段中
                 .select(WfMeetingApply.class,x -> VoToColumnUtil.fieldsToColumns(WfMeetingApply.class).contains(x.getProperty()))
                 .leftJoin(MeetingRoom.class, MeetingRoom::getId, WfMeetingApply::getMeetingRoomId)
+                .leftJoin(XjrUser.class, XjrUser::getId, WfMeetingApply::getSponsorId)
                 .eq(WfMeetingApply::getId, id)
                 ;
         WfMeetingApply meetingApply = this.selectJoinOne(WfMeetingApply.class, wrapper);
@@ -159,9 +293,16 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
                 && ObjectUtils.isNotEmpty(workflowFormRelation)
                 && HistoricProcessInstance.STATE_COMPLETED.equals(workflowFormRelation.getCurrentState())
         ) {
+            // 修改会议申请流程状态为正常通过结束
+            WfMeetingApply updateWorkflowStatus = new WfMeetingApply();
+            updateWorkflowStatus.setId(meetingApply.getId());
+            updateWorkflowStatus.setWorkflowStatus(1);
+            this.updateById(updateWorkflowStatus);
+
             if (meetingApply.getMeetingApplyParticipants() == null || meetingApply.getMeetingApplyParticipants().isEmpty()) {
                 return;
             }
+
             List<String> userIds = Arrays.asList(meetingApply.getMeetingApplyParticipants().split(","));
 
             // 处理会议时间
@@ -172,15 +313,15 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
             String startTime = startLocalDateTime.format(formatter);
             String endTime = endLocalDateTime.format(formatter);
 
-            // 获取申请人
-            List<WorkflowExtra> list = extraService.list(
-                    new MPJLambdaWrapper<WorkflowExtra>()
-                            .select(WorkflowExtra.class, x -> VoToColumnUtil.fieldsToColumns(WorkflowExtra.class).contains(x.getProperty()))
-                            .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getProcessId, WorkflowExtra::getProcessId)
-                            .eq(WorkflowFormRelation::getFormId, id)
-                            .orderByAsc(WorkflowExtra::getStartTime)
-            );
-            String startUserName = list.get(0).getStartUserName();
+//             获取申请人
+//            List<WorkflowExtra> list = extraService.list(
+//                    new MPJLambdaWrapper<WorkflowExtra>()
+//                            .select(WorkflowExtra.class, x -> VoToColumnUtil.fieldsToColumns(WorkflowExtra.class).contains(x.getProperty()))
+//                            .innerJoin(WorkflowFormRelation.class, WorkflowFormRelation::getProcessId, WorkflowExtra::getProcessId)
+//                            .eq(WorkflowFormRelation::getFormId, id)
+//                            .orderByAsc(WorkflowExtra::getStartTime)
+//            );
+//            String startUserName = list.get(0).getStartUserName();
 
             MeetingConferee meetingConferee;
 
@@ -219,12 +360,24 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
                 paramJson.put("thing7", thing7);
 
                 JSONObject thing8 = new JSONObject();
-                thing8.put("value", startUserName);
+                thing8.put("value", meetingApply.getMonogramTheme());
                 paramJson.put("thing8", thing8);
 
                 weChatSendMessageDto.setContent(paramJson);
                 weChatService.sendTemplateMessage(weChatSendMessageDto);
             }
         }
+
+        if (ObjectUtils.isNotEmpty(meetingApply)
+                && ObjectUtils.isNotEmpty(workflowFormRelation)
+                && !HistoricProcessInstance.STATE_COMPLETED.equals(workflowFormRelation.getCurrentState())
+                && !HistoricProcessInstance.STATE_ACTIVE.equals(workflowFormRelation.getCurrentState())
+        ) {
+            // 修改会议申请流程状态为不正常的结束
+            WfMeetingApply updateWorkflowStatus = new WfMeetingApply();
+            updateWorkflowStatus.setId(meetingApply.getId());
+            updateWorkflowStatus.setWorkflowStatus(2);
+            this.updateById(updateWorkflowStatus);
+        }
     }
 }

+ 47 - 0
src/main/java/com/xjrsoft/module/oa/vo/MeetingConfereeListVo.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+* @title: 会议参会人员列表(不分页)出参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class MeetingConfereeListVo {
+
+    /**
+     * 主键编号
+     */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+     * 用户主键id(xjr_user)
+     */
+    @ApiModelProperty("用户主键id(xjr_user)")
+    private Long userId;
+    /**
+     * 用户主键id(xjr_user)
+     */
+    @ApiModelProperty("用户主键id(xjr_user)")
+    private String userIdCn;
+    /**
+     * 账户
+     */
+    @ApiModelProperty("账户")
+    private String userName;
+    /**
+     * 签到状态(0:未签到,1:已签到)
+     */
+    @ApiModelProperty("签到状态(0:未签到,1:已签到,2:请假)")
+    private Integer checkInStatus;
+    /**
+     * 签到时间
+     */
+    @ApiModelProperty("签到时间")
+    private LocalDateTime checkInDate;
+}

+ 50 - 0
src/main/java/com/xjrsoft/module/oa/vo/MeetingConfereeOpinionListVo.java

@@ -0,0 +1,50 @@
+package com.xjrsoft.module.oa.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+* @title: 会议参会人员意见表单出参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class MeetingConfereeOpinionListVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 会议参会人员主键id(meeting_conferee)
+    */
+    @ApiModelProperty("会议参会人员主键id(meeting_conferee)")
+    private Long meetingConfereeId;
+    /**
+     * 用户主键id(xjr_user)
+     */
+    @ApiModelProperty("用户主键id(xjr_user)")
+    private Long userId;
+    /**
+     * 用户主键id(xjr_user)
+     */
+    @ApiModelProperty("用户主键id(xjr_user)")
+    private String userIdCn;
+    /**
+    * 意见
+    */
+    @ApiModelProperty("意见")
+    private String opinion;
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createDate;
+}

+ 25 - 0
src/main/java/com/xjrsoft/module/oa/vo/MeetingSummaryVo.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 会会议纪要出参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class MeetingSummaryVo {
+
+    /**
+     * 主键编号
+     */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+     * 会议纪要
+     */
+    @ApiModelProperty("会议纪要")
+    private String meetingSummary;
+}

+ 18 - 23
src/main/java/com/xjrsoft/module/oa/vo/WfMeetingApplyPageVo.java

@@ -1,15 +1,10 @@
 package com.xjrsoft.module.oa.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import com.xjrsoft.common.annotation.Trans;
-import com.xjrsoft.common.enums.TransType;
+import java.time.LocalDate;
 import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
 * @title: 分页列表出参
@@ -29,7 +24,7 @@ public class WfMeetingApplyPageVo {
     * 会议日期
     */
     @ApiModelProperty("会议日期")
-    private Date meetingApplyDate;
+    private LocalDate meetingApplyDate;
     /**
     * 会议开始时间
     */
@@ -45,26 +40,36 @@ public class WfMeetingApplyPageVo {
     */
     @ApiModelProperty("会议形式(xjr_dictionary_item(meeting_type))")
     private String meetingApplyFormat;
+    /**
+     * 会议形式(xjr_dictionary_item(meeting_type))
+     */
+    @ApiModelProperty("会议形式(xjr_dictionary_item(meeting_type))")
+    private String meetingApplyFormatCn;
     /**
     * 会议室管理主键id(meeting_room)
     */
     @ApiModelProperty("会议室管理主键id(meeting_room)")
     private Long meetingRoomId;
+    /**
+     * 会议室管理主键id(meeting_room)
+     */
+    @ApiModelProperty("会议室管理主键id(meeting_room)")
+    private String meetingRoomIdCn;
     /**
     * 线上会议链接
     */
     @ApiModelProperty("线上会议链接")
     private String meetingApplyUrl;
     /**
-    * 参会人员
-    */
-    @ApiModelProperty("参会人员")
-    private String meetingApplyParticipants;
+     * 主持人
+     */
+    @ApiModelProperty("主持人")
+    private Long meetingApplyHost;
     /**
     * 主持人
     */
     @ApiModelProperty("主持人")
-    private String meetingApplyHost;
+    private String meetingApplyHostCn;
     /**
     * 会议主题
     */
@@ -86,19 +91,9 @@ public class WfMeetingApplyPageVo {
     @ApiModelProperty("会标主题")
     private String monogramTheme;
     /**
-    * 会议纪要
-    */
-    @ApiModelProperty("会议纪要")
-    private String meetingSummary;
-    /**
-    * 会前资料文件上传主键id
-    */
-    @ApiModelProperty("会前资料文件上传主键id")
-    private Long preMeetingInfoFileId;
-    /**
     * 会议状态(0:未开始 1:已经撤销,2:已结束)
     */
-    @ApiModelProperty("会议状态(0:未开始 1:已经撤销,2:已结束)")
+    @ApiModelProperty("会议状态(0:未开始 1:已经撤销,2:已结束,3:进行中)")
     private Integer meetingStatus;
 
 }

+ 9 - 1
src/main/resources/sqlScript/20250324_sql.sql

@@ -105,6 +105,14 @@ alter table wf_meeting_apply
 alter table wf_meeting_apply
     change status meeting_status int default 0 null comment '会议状态(0:未开始 1:已经撤销,2:已结束)';
 
+alter table wf_meeting_apply
+    modify meeting_apply_host bigint null comment '主持人';
+
+alter table wf_meeting_apply
+    add sponsor_id bigint not null comment '会议发起人主键id(xjr_user)' after id;
+
+alter table wf_meeting_apply
+    add workflow_status int default 0 not null comment '会议申请流程状态(0:未结束,1:已经结束,正常通过,2:已经结束,未正常通过)';
 -- ----------------------------
 -- 会议参会人员
 -- ----------------------------
@@ -143,7 +151,7 @@ CREATE TABLE `meeting_conferee_opinion`
     enabled_mark        INT      NOT NULL COMMENT '有效标志',
 
     meeting_conferee_id bigint   not null comment '会议参会人员主键id(meeting_conferee)',
-    user_id             text     not null comment '意见'
+    opinion             text     not null comment '意见'
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COMMENT = '会议参会人员意见';