背景
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); } } } }
在這里我們做了好幾張擴展表,以把公司,部門,人員,同步下來。