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

}

在這里我們做了好幾張擴展表,以把公司,部門,人員,同步下來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM