zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
    
    }

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

  • 相关阅读:
    FLASK报错,TypeError,需要valid response
    pycharm push failed
    pycharm环境艰难安装requirements.txt库文件
    git如何忽略部分不想备份的文件
    redis.exceptions.ConnectionError,目标计算机积极拒绝
    Mysql无法启动
    pymysql
    mysql数据类型
    MySQL命令(SQL语句)
    MySQL安装(windows10)
  • 原文地址:https://www.cnblogs.com/liuwenjun/p/10281323.html
Copyright © 2011-2022 走看看