flowable交流群:633168411

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);
            }
        }
    }

}

在这里我们做了好几张扩展表,以把公司,部门,人员,同步下来。

 

posted @ 2019-01-17 11:29  小学生05101  阅读(5195)  评论(0编辑  收藏  举报
flowable交流群:633168411