线上会议模块的排版布局以表格为主,与用户管理、角色管理页面很相似。只不过每个记录多了折叠按钮,我们点开之后,能看到会议的描述信息。
总体上看,线上会议的主要功能都是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);
}
}