笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述flowable用户组的处理相关的知识,希望能为你提供帮助。
背景
flowable有自己的用户账号信息,用户信息,用户组信息,其实这些用户信息都我们系统可能都存在,那么我们如何去使用一份数据呢?
1.我们可以建立视图直接取我们的组织信息,这个可以参考相关的文档
2.我们可以把组织数据同步到flowable的表中【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);
在这里我们做了好几张扩展表,以把公司,部门,人员,同步下来。
文章图片
推荐阅读
- JDK ThreadPoolExecutor核心原理与实践
- Ubuntu 下配置 Qt 的 FFmpeg 的开发环境
- WordPress-为什么在我的自定义帖子类型中会忽略短代码()
- WordPress(wp_create_category可能需要20秒才能完成)
- WordPress的WP_Query仅搜索标题
- WordPress wp_insert_post在移动设备上多次触发
- WordPress网站显示不正确
- WordPress警告支持
- WordPress在Sage模板中使用图像