手记

【学习打卡】第8天 线下会议管理

课程名称: SpringBoot+Vue3 项目实战,打造企业级在线办公系统
课程章节: 第4章 线下会议管理
主讲老师: 神思者

课程内容

当已经有了线下会议室之后,就可以发起会议申请。然后申请人,可以选择对应的会议室。但会议室比较紧张,为了统一管理。需要由人力对会议室的申请进行审批。避免有多人同时申请会议室的情况。

大概的后端处理时序图如下:

应该先写线程任务类(MeetingWorkflowTask),后面写MeetingService的时候正好可以调用这个任务类。那咱们就在com.example.emos.api.task包中创建MeetingWorkflowTask.java类。

因为如果系统引入工作流,并对工作流进行设计与开发。其工作量比较庞大。这里讲师提供了一个封装好的工作流子系统。我们可以直接去引用工作流的能力,实现会议室审批。

线程任务类发送HTTP请求给工作流项目,提交的数据中包括了会议申请人的userId、姓名、部门经理的userId,以及总经理的userId,那么这些数据都是要经过SQL语句查询的。包括线程任务类拿到instanceId之后,要更新tb_meeting表中的记录,所以还需要定义UPDATE语句。

我们按照时序图写程序,思路就清晰多了,看来时序图的作用还真挺重要。

课程收获

application.yml文件中,定义接收会议审批结果的URL地址。目前这个URL对应的Web方法还没有创建,一会儿我们去创建这个Web方法。

emos:
  ……
  recieveNotify: http://本机ID地址:8090/emos-api/meeting/recieveNotify

com.example.emos.api.task包中创建MeetingWorkflowTask.java类,代码如下:

@Component
@Slf4j
public class MeetingWorkflowTask {

    @Autowired
    private TbUserDao userDao;

    @Autowired
    private TbMeetingDao meetingDao;

    @Value("${emos.recieveNotify}")
    private String recieveNotify;

    @Value("${emos.code}")
    private String code;

    @Value("${emos.tcode}")
    private String tcode;

    @Value("${workflow.url}")
    private String workflow;

    @Async("AsyncTaskExecutor")
    public void startMeetingWorkflow(String uuid, int creatorId,String title, String date, String start,String meetingType) {
        //查询申请人基本信息
        HashMap info = userDao.searchUserInfo(creatorId);
        
        JSONObject json = new JSONObject();
        json.set("url", recieveNotify);
        json.set("uuid", uuid);
        json.set("creatorId",creatorId);
        json.set("creatorName",info.get("name").toString());
        json.set("code", code);
        json.set("tcode", tcode);
        json.set("title",title);
        json.set("date", date);
        json.set("start", start);
        json.set("meetingType",meetingType);
        
        String[] roles = info.get("roles").toString().split(",");
        //判断用户角色是不是总经理,总经理创建的会议不需要审批,所以不需要查询总经理userId和部门经理userId
        if (!ArrayUtil.contains(roles, "总经理")) {
            //查询部门经理userId
            Integer managerId = userDao.searchDeptManagerId(creatorId);
            json.set("managerId", managerId);
            
            //查询总经理userId
            Integer gmId = userDao.searchGmId();
            json.set("gmId", gmId);
            
            //查询参会人是否为同一个部门
            boolean bool = meetingDao.searchMeetingMembersInSameDept(uuid);
            json.set("sameDept", bool);
        }
        
        String url = workflow + "/workflow/startMeetingProcess";
        HttpResponse resp = HttpRequest.post(url).header("Content-Type", "application/json")
                .body(json.toString()).execute();
        if (resp.getStatus() == 200) {
            json = JSONUtil.parseObj(resp.body());
            String instanceId = json.getStr("instanceId");
            HashMap param = new HashMap();
            param.put("uuid", uuid);
            param.put("instanceId", instanceId);
            //更新会议记录的instance_id字段
            int row = meetingDao.updateMeetingInstanceId(param);
            if (row != 1) {
                throw new EmosException("保存会议工作流实例ID失败");
            }
        } else {
            log.error(resp.body());
        }
    }
}

课程截屏



0人推荐
随时随地看视频
慕课网APP