Browse Source

会议二维码
我发起的会议
历史会议

大数据与最优化研究所 2 weeks ago
parent
commit
3d68da7122

+ 40 - 1
src/main/java/com/xjrsoft/module/oa/controller/WfMeetingApplyController.java

@@ -1,12 +1,15 @@
 package com.xjrsoft.module.oa.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.common.utils.QrCodeUtil;
+import com.xjrsoft.config.CommonPropertiesConfig;
 import com.xjrsoft.module.oa.dto.*;
 import com.xjrsoft.module.oa.entity.WfMeetingApply;
 import com.xjrsoft.module.oa.service.IWfMeetingApplyService;
@@ -37,6 +40,8 @@ public class WfMeetingApplyController {
 
     private final IFileService fileService;
 
+    private final CommonPropertiesConfig commonPropertiesConfig;
+
     @GetMapping(value = "/list_meeting_room")
     @ApiOperation(value="会议室列表(不分页)")
     @SaCheckPermission("wfmeetingapply:detail")
@@ -56,7 +61,7 @@ public class WfMeetingApplyController {
         return RT.ok(pageOutput);
     }
 
-    @GetMapping(value = "/today-meeting-mobile-page")
+    @GetMapping(value = "/page-today-meeting-mobile")
     @ApiOperation(value="移动端今日会议列表(分页)")
     @SaCheckPermission("wfmeetingapply:detail")
     @XjrLog(value = "移动端今日会议列表(分页)")
@@ -66,6 +71,26 @@ public class WfMeetingApplyController {
         return RT.ok(pageOutput);
     }
 
+    @GetMapping(value = "/page-sponsor-meeting-mobile")
+    @ApiOperation(value="移动端我发起的会议列表(分页)")
+    @SaCheckPermission("wfmeetingapply:detail")
+    @XjrLog(value = "移动端我发起的会议列表(分页)")
+    public RT<PageOutput<SponsorMeetingMobilePageVo>> sponsorMeetingMobilePage(@Valid SponsorMeetingMobilePageDto dto){
+        IPage<SponsorMeetingMobilePageVo> page = wfMeetingApplyService.sponsorMeetingMobilePage(dto);
+        PageOutput<SponsorMeetingMobilePageVo> pageOutput = ConventPage.getPageOutput(page, SponsorMeetingMobilePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/page-history-meeting-mobile")
+    @ApiOperation(value="移动端历史会议列表(分页)")
+    @SaCheckPermission("wfmeetingapply:detail")
+    @XjrLog(value = "移动端历史会议列表(分页)")
+    public RT<PageOutput<HistoryMeetingMobilePageVo>> historyMeetingMobilePage(@Valid HistoryMeetingMobilePageDto dto){
+        IPage<HistoryMeetingMobilePageVo> page = wfMeetingApplyService.historyMeetingMobilePage(dto);
+        PageOutput<HistoryMeetingMobilePageVo> pageOutput = ConventPage.getPageOutput(page, HistoryMeetingMobilePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
     @GetMapping(value = "/mobile-info")
     @ApiOperation(value="移动端会议信息会议的详情")
     @SaCheckPermission("wfmeetingapply:detail")
@@ -163,6 +188,20 @@ public class WfMeetingApplyController {
         return RT.ok(isSuccess);
     }
 
+    @GetMapping(value = "/meeting-check-in-qrcode")
+    @ApiOperation(value = "会议签到二维码-生成二维码")
+    @SaCheckPermission("wfmeetingapply:detail")
+    @XjrLog(value = "会议签到二维码-生成二维码")
+    public RT<String> qrcode(@RequestParam Long id) throws Exception {
+        String url = commonPropertiesConfig.getDomainApp() + "/pages/material/grant?id=" + id + "&userId=" + StpUtil.getLoginIdAsLong();
+        int width = 200;
+        int height = 200;
+        int margin = 1;
+
+        String base64 = QrCodeUtil.createBase64(url, width, height, margin);
+        return RT.ok(base64);
+    }
+
 //    @GetMapping(value = "/info")
 //    @ApiOperation(value="根据id查询信息")
 //    @SaCheckPermission("wfmeetingapply:detail")

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

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.oa.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+
+/**
+* @title: 分页查询入参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class HistoryMeetingMobilePageDto extends PageInput {
+
+    @ApiModelProperty("会议日期开始")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate startMeetingApplyDate;
+
+    @ApiModelProperty("会议日期结束")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate endMeetingApplyDate;
+}

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

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.oa.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDate;
+
+
+/**
+* @title: 分页查询入参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SponsorMeetingMobilePageDto extends PageInput {
+
+    @ApiModelProperty("会议日期开始")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate startMeetingApplyDate;
+
+    @ApiModelProperty("会议日期结束")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate endMeetingApplyDate;
+}

+ 4 - 0
src/main/java/com/xjrsoft/module/oa/service/IWfMeetingApplyService.java

@@ -23,6 +23,10 @@ public interface IWfMeetingApplyService extends MPJBaseService<WfMeetingApply> {
 
     IPage<TodayMeetingMobilePageVo> todayMeetingMobilePage(TodayMeetingMobilePageDto dto);
 
+    IPage<SponsorMeetingMobilePageVo> sponsorMeetingMobilePage(SponsorMeetingMobilePageDto dto);
+
+    IPage<HistoryMeetingMobilePageVo> historyMeetingMobilePage(HistoryMeetingMobilePageDto dto);
+
     MeetingMobileInfoVo mobileInfo(Long id);
 
     WfMeetingApplyInWorkflowVo infoInWorkflow(Long id);

+ 84 - 0
src/main/java/com/xjrsoft/module/oa/service/impl/WfMeetingApplyServiceImpl.java

@@ -324,6 +324,90 @@ public class WfMeetingApplyServiceImpl extends MPJBaseServiceImpl<WfMeetingApply
         return page;
     }
 
+    @Override
+    public IPage<SponsorMeetingMobilePageVo> sponsorMeetingMobilePage(SponsorMeetingMobilePageDto dto) {
+        Long loginId = StpUtil.getLoginIdAsLong();
+
+        // 当前时间
+        LocalDate nowLocalDate = LocalDate.now();
+        LocalTime nowLocalTime = LocalTime.now();
+
+        MPJLambdaWrapper<WfMeetingApply> wfMeetingApplyPageVoMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        wfMeetingApplyPageVoMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(WfMeetingApply::getId)
+                .select(WfMeetingApply.class, x -> VoToColumnUtil.fieldsToColumns(SponsorMeetingMobilePageVo.class).contains(x.getProperty()))
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfMeetingApply::getMeetingApplyFormat,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, SponsorMeetingMobilePageVo::getMeetingApplyFormatCn)
+                )
+                .leftJoin(MeetingRoom.class, MeetingRoom::getId, WfMeetingApply::getMeetingRoomId,
+                        wrapper -> wrapper
+                                .selectAs(MeetingRoom::getName, SponsorMeetingMobilePageVo::getMeetingRoomIdCn)
+                )
+                .eq(WfMeetingApply::getSponsorId, loginId)
+                .ge(ObjectUtils.isNotEmpty(dto.getStartMeetingApplyDate()), WfMeetingApply::getMeetingApplyDate, dto.getStartMeetingApplyDate())
+                .le(ObjectUtils.isNotEmpty(dto.getEndMeetingApplyDate()), WfMeetingApply::getMeetingApplyDate, dto.getEndMeetingApplyDate())
+                .eq(WfMeetingApply::getWorkflowStatus, 1)
+                .orderByAsc("meeting_apply_date", "meeting_apply_s")
+        ;
+
+        IPage<SponsorMeetingMobilePageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), SponsorMeetingMobilePageVo.class, wfMeetingApplyPageVoMPJLambdaWrapper);
+
+        // 判断会议状态
+        for (SponsorMeetingMobilePageVo vo : page.getRecords()) {
+            if (vo.getMeetingStatus() != 1) {
+                if (vo.getMeetingApplyDate().isBefore(nowLocalDate)) {
+                    vo.setMeetingStatus(2);
+                } else if (vo.getMeetingApplyDate().isAfter(nowLocalDate)) {
+                    vo.setMeetingStatus(0);
+                } else {
+                    if (vo.getMeetingApplyE().isBefore(nowLocalTime)) {
+                        vo.setMeetingStatus(2);
+                    } else if (vo.getMeetingApplyS().isAfter(nowLocalTime)) {
+                        vo.setMeetingStatus(0);
+                    } else {
+                        vo.setMeetingStatus(3);
+                    }
+                }
+            }
+        }
+
+        return page;
+    }
+
+    @Override
+    public IPage<HistoryMeetingMobilePageVo> historyMeetingMobilePage(HistoryMeetingMobilePageDto dto) {
+        Long loginId = StpUtil.getLoginIdAsLong();
+
+        if(ObjectUtils.isEmpty(dto.getEndMeetingApplyDate())){
+            dto.setEndMeetingApplyDate(LocalDate.now().minusDays(1));
+        }
+
+        MPJLambdaWrapper<WfMeetingApply> wfMeetingApplyPageVoMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        wfMeetingApplyPageVoMPJLambdaWrapper
+                .disableSubLogicDel()
+                .select(WfMeetingApply::getId)
+                .select(WfMeetingApply.class, x -> VoToColumnUtil.fieldsToColumns(HistoryMeetingMobilePageVo.class).contains(x.getProperty()))
+                .innerJoin(MeetingConferee.class, MeetingConferee::getWfMeetingApplyId, WfMeetingApply::getId)
+                .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, WfMeetingApply::getMeetingApplyFormat,
+                        wrapper -> wrapper
+                                .selectAs(DictionaryDetail::getName, HistoryMeetingMobilePageVo::getMeetingApplyFormatCn)
+                )
+                .leftJoin(MeetingRoom.class, MeetingRoom::getId, WfMeetingApply::getMeetingRoomId,
+                        wrapper -> wrapper
+                                .selectAs(MeetingRoom::getName, HistoryMeetingMobilePageVo::getMeetingRoomIdCn)
+                )
+                .eq(MeetingConferee::getUserId, loginId)
+                .ge(ObjectUtils.isNotEmpty(dto.getStartMeetingApplyDate()), WfMeetingApply::getMeetingApplyDate, dto.getStartMeetingApplyDate())
+                .le(ObjectUtils.isNotEmpty(dto.getEndMeetingApplyDate()), WfMeetingApply::getMeetingApplyDate, dto.getEndMeetingApplyDate())
+                .eq(WfMeetingApply::getWorkflowStatus, 1)
+                .orderByAsc("meeting_apply_date", "meeting_apply_s")
+        ;
+
+        return this.selectJoinListPage(ConventPage.getPage(dto), HistoryMeetingMobilePageVo.class, wfMeetingApplyPageVoMPJLambdaWrapper);
+    }
+
     @Override
     public MeetingMobileInfoVo mobileInfo(Long id) {
         MPJLambdaWrapper<WfMeetingApply> wfMeetingApplyPageVoMPJLambdaWrapper = new MPJLambdaWrapper<>();

+ 68 - 0
src/main/java/com/xjrsoft/module/oa/vo/HistoryMeetingMobilePageVo.java

@@ -0,0 +1,68 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+
+/**
+* @title: 移动端今日会议列表(分页)出参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class HistoryMeetingMobilePageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+     * 会议日期
+     */
+    @ApiModelProperty("会议日期")
+    private LocalDate meetingApplyDate;
+    /**
+    * 会议开始时间
+    */
+    @ApiModelProperty("会议开始时间")
+    private LocalTime meetingApplyS;
+    /**
+    * 会议结束时间
+    */
+    @ApiModelProperty("会议结束时间")
+    private LocalTime meetingApplyE;
+    /**
+    * 会议形式(xjr_dictionary_item(meeting_type))
+    */
+    @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 meetingApplyTheme;
+}

+ 73 - 0
src/main/java/com/xjrsoft/module/oa/vo/SponsorMeetingMobilePageVo.java

@@ -0,0 +1,73 @@
+package com.xjrsoft.module.oa.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalTime;
+
+/**
+* @title: 移动端今日会议列表(分页)出参
+* @Author phoenix
+* @Date: 2025-03-26
+* @Version 1.0
+*/
+@Data
+public class SponsorMeetingMobilePageVo {
+
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private String id;
+    /**
+     * 会议日期
+     */
+    @ApiModelProperty("会议日期")
+    private LocalDate meetingApplyDate;
+    /**
+    * 会议开始时间
+    */
+    @ApiModelProperty("会议开始时间")
+    private LocalTime meetingApplyS;
+    /**
+    * 会议结束时间
+    */
+    @ApiModelProperty("会议结束时间")
+    private LocalTime meetingApplyE;
+    /**
+    * 会议形式(xjr_dictionary_item(meeting_type))
+    */
+    @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 meetingApplyTheme;
+    /**
+    * 会议状态(0:未开始 1:已经撤销,2:已结束,3:进行中,4:未参与)
+    */
+    @ApiModelProperty("会议状态(0:未开始 1:已经撤销,2:已结束,3:进行中,4:未参与)")
+    private Integer meetingStatus;
+}

+ 0 - 16
src/main/java/com/xjrsoft/module/oa/vo/TodayMeetingMobilePageVo.java

@@ -20,16 +20,6 @@ public class TodayMeetingMobilePageVo {
     */
     @ApiModelProperty("")
     private String id;
-    /**
-     * 会议发起人主键id(xjr_user
-     */
-    @ApiModelProperty("会议发起人主键id(xjr_user")
-    private Long sponsorId;
-    /**
-     * 会议发起人主键id(xjr_user
-     */
-    @ApiModelProperty("会议发起人主键id(xjr_user")
-    private String sponsorIdCn;
     /**
     * 会议开始时间
     */
@@ -75,12 +65,6 @@ public class TodayMeetingMobilePageVo {
     */
     @ApiModelProperty("会议状态(0:未开始 1:已经撤销,2:已结束,3:进行中,4:未参与)")
     private Integer meetingStatus;
-
-    /**
-     * 当前用户的会议状态(0:未开始 1:已经撤销,2:已结束)
-     */
-    @ApiModelProperty("当前用户的会议状态(0:未开始 1:已经撤销,2:已结束,3:进行中)")
-    private Integer userMeetingStatus;
     /**
      * 签到状态(0:未签到,1:已签到)
      */

+ 4 - 9
src/main/java/com/xjrsoft/module/textbook/controller/WfTextbookClaimController.java

@@ -162,20 +162,15 @@ public class WfTextbookClaimController {
     @GetMapping(value = "/info-qrcode")
     @ApiOperation(value = "教材领取-生成二维码")
     @SaCheckPermission("wfstudenttextbookclaim:detail")
-    @XjrLog(value = "教材领取-生成二维码", saveResponseData = true)
+    @XjrLog(value = "教材领取-生成二维码")
     public RT<String> qrcode(@RequestParam Long id) throws Exception {
-        String url = commonPropertiesConfig.getDomainApp() + "/pages/material/grant?id=" + id + "&userId=" + StpUtil.getLoginIdAsLong();
+        String url = commonPropertiesConfig.getDomainApp() + "/pages/meeting/detail?id=" + id + "&userId=" + StpUtil.getLoginIdAsLong();
         int width = 200;
         int height = 200;
         int margin = 1;
 
-        try {
-            String base64 = QrCodeUtil.createBase64(url, width, height, margin);
-            return RT.ok(base64);
-        } catch (Exception e) {
-            throw e;
-        }
-
+        String base64 = QrCodeUtil.createBase64(url, width, height, margin);
+        return RT.ok(base64);
     }
 
     @PostMapping("/claim-records-export-query")