全部开发者教程

企业级在线办公系统

首页 慕课教程 企业级在线办公系统 企业级在线办公系统 附-1 查询线上会议分页数据(后端)

线上会议模块的排版布局以表格为主,与用户管理、角色管理页面很相似。只不过每个记录多了折叠按钮,我们点开之后,能看到会议的描述信息。

图片描述
总体上看,线上会议的主要功能都是CRUD操作,看似比较简单,但是创建会议的时候也要调用工作流项目,但是我们有线上会议模块的开发经验,这点事情难不住我们。

图片描述

一、编写持久层代码

TbMeetingDao.xml文件中,编写SQL语句。

<select id="searchOnlineMeetingByPage" parameterType="HashMap" resultType="HashMap">
    SELECT m.id,
           m.title,
           u.`name` AS creatorName,
           IF( creator_id = #{userId}, "true", "false" ) AS isCreator,
           IF(JSON_CONTAINS(m.members,CAST(#{userId} AS CHAR))=1,"true","false") AS mine,
           m.date,
           DATE_FORMAT(m.`start`,'%H:%i') AS `start`,
           DATE_FORMAT(m.`end`,'%H:%i') AS `end`,
           JSON_LENGTH ( m.members ) AS num,
           m.`status`,
           m.`desc`,
           m.uuid,
           m.instance_id AS instanceId
    FROM tb_meeting m
    JOIN tb_user u ON m.creator_id = u.id
    WHERE m.type = 1 AND m.`status` != 2
    <if test="date!=null">
        AND m.date = #{date}
    </if>
    <if test="mold=='我的会议'">
        AND JSON_CONTAINS(m.members, CAST(#{userId} AS CHAR))
    </if>
    ORDER BY m.id DESC
    LIMIT #{start}, #{length}
</select>

<select id="searchOnlineMeetingCount" parameterType="HashMap" resultType="long">
    SELECT COUNT(*)
    FROM tb_meeting
    WHERE type = 1 AND `status` != 2
    <if test="date!=null">
        AND date = #{date}
    </if>
    <if test="mold=='我的会议'">
        AND JSON_CONTAINS(members, CAST(#{userId} AS CHAR))
    </if>
</select>

TbMeetinDao.java接口中,定义DAO方法。

public interface TbMeetingDao {
    ……
    public ArrayList<HashMap> searchOnlineMeetingByPage(HashMap param);
    public long searchOnlineMeetingCount(HashMap param);
}

二、编写业务层代码

MeetingService.java接口中,定义抽象方法。

public interface MeetingService {
    ……
    public PageUtils searchOnlineMeetingByPage(HashMap param);
}

MeetingServiceImpl.java类中,实现抽象方法。

public class MeetingServiceImpl implements MeetingService {
    ……
    @Override
    public PageUtils searchOnlineMeetingByPage(HashMap param) {
        ArrayList<HashMap> list = meetingDao.searchOnlineMeetingByPage(param);
        long count = meetingDao.searchOnlineMeetingCount(param);
        int start = (Integer) param.get("start");
        int length = (Integer) param.get("length");
        PageUtils pageUtils = new PageUtils(list, count, start, length);
        return pageUtils;
    }
}

三、编写Web层代码

创建SearchOnlineMeetingByPageForm.java类,保存Ajax提交的数据。

@Data
@Schema(description = "查询线上会议分页数据表单")
public class SearchOnlineMeetingByPageForm {
    @Pattern(regexp = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$", message = "date内容不能为空")
    @Schema(description = "日期")
    private String date;

    @NotNull(message = "mold不能空")
    @Pattern(regexp = "^全部会议$|^我的会议$", message = "mold内容错误")
    @Schema(description = "模式")
    private String mold;

    @NotNull(message = "page不能为空")
    @Min(value = 1, message = "page不能小于1")
    @Schema(description = "页数")
    private Integer page;

    @NotNull(message = "length不能为空")
    @Range(min = 10, max = 50, message = "length必须在10~50之间")
    @Schema(description = "每页记录数")
    private Integer length;
}

MeetingController.java类中,定义Web方法,然后大家就可以在Swagger页面测试Web方法了。

public class MeetingController {
    ……
    @PostMapping("/searchOnlineMeetingByPage")
    @Operation(summary = "查询线上会议分页数据")
    @SaCheckLogin
    public R searchOnlineMeetingByPage(@Valid @RequestBody SearchOnlineMeetingByPageForm form) {
        int page = form.getPage();
        int length = form.getLength();
        int start = (page - 1) * length;
        HashMap param = new HashMap() {{
            put("date", form.getDate());
            put("mold", form.getMold());
            put("userId", StpUtil.getLoginId());
            put("start", start);
            put("length", length);
        }};
        PageUtils pageUtils = meetingService.searchOnlineMeetingByPage(param);
        return R.ok().put("page", pageUtils);
    }
}