flowable用户组的处理
背景
flowable有自己的用户账号信息,用户信息,用户组信息,其实这些用户信息都我们系统可能都存在,那么我们如何去使用一份数据呢?
1.我们可以建立视图直接取我们的组织信息,这个可以参考相关的文档
2.我们可以把组织数据同步到flowable的表中
我们这边的处理时以同步的机制来做的,把我们的数据同步到flowable的表中,这样的好处就是我们不用改动flowable的表结构,flowable升级的话,对我们没有任何影响
具体做法如下:
1. 在我们的MDM系统(组织管理系统)通过rabbitmq的消息队列的方式发送到消息队列里面,以后有任何的改动都发送消息。
2.在我们流程中心添加一个监听器,实时监听这个队列的数据,然后把数据添加到我们的flowable表中,实现实时同步的效果。
@Component @RabbitListener(queues = FlowConstant.FLOWABLE_MDM_DATA_QUEUE, containerFactory = "rabbitListenerContainerFactory") public class MdmDataSyncReceiver { private static Logger logger = LoggerFactory.getLogger(MdmDataSyncReceiver.class); @Resource private ICompanyService companyService; @Resource private IDepartmentService departmentService; @Resource private IUserVoService userVoService; @RabbitHandler public void process(@Payload String message) { if (StringUtils.isNotBlank(message)) { try { JSONObject map = JSONObject.parseObject(message); JSONArray datas = map.getJSONArray("datas"); String type = map.getString("synEhr"); if (null != datas && null != type) { switch (SynMDMEnum.getEnum(type)) { case COMPANY: List<CompanyVo> companyVos = JSONArray.parseArray(datas.toJSONString(), CompanyVo.class); companyService.insertOrUpdateList(companyVos.stream().filter(companyVo -> companyVo.getStatus().equals(1)).collect(Collectors.toList())); break; case DEPARTMENT: List<DepartmentVo> departmentVos = JSONArray.parseArray(datas.toJSONString(), DepartmentVo.class); departmentVos.forEach(param -> { if (null != param.getIscancle() && null != param.getStatus() && param.getIscancle().equals(0) && param.getStatus().equals(DepartmentStatusEnum.Y.getCode()) && param.getDelFlag().equals(FlowConstant.NO_DELETE_FLAG)) { param.setStatus(DeptStatusEnum.ON.getCode()); } else { param.setStatus(DeptStatusEnum.OFF.getCode()); } }); departmentService.insertOrUpdateList(departmentVos); break; case PERSONAL: List<PersonVo> personVos = JSONArray.parseArray(datas.toJSONString(), PersonVo.class); personVos.forEach(param -> { if (null != param.getStatus() && null != param.getPoststatus() && param.getStatus().equals(1) && param.getPoststatus().equals(1) && param.getDelFlag().equals(FlowConstant.NO_DELETE_FLAG)) { param.setStatus(PersonStatusEnum.ON.getCode()); } else { param.setStatus(PersonStatusEnum.OFF.getCode()); } }); userVoService.insertOrUpdateList(personVos); break; default: } } } catch (Exception e) { logger.error("MdmDataSyncReceiver-error", e); } } } }
在这里我们做了好几张扩展表,以把公司,部门,人员,同步下来。