From 55f8468be2f4b2783684726141a76f8a506d25a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Mon, 8 Jun 2020 13:39:03 +0800 Subject: [PATCH] =?UTF-8?q?MDM=E5=9F=BA=E7=A1=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../busi/ISysPojoVersionDetailService.java | 4 + .../iservice/busi/ISysPojoVersionPlanService.java | 2 + modules/i3plus-core-apiservice/pom.xml | 11 ++ .../busi/SysPojoVersionDetailController.java | 33 +++- .../busi/SysPojoVersionPlanController.java | 51 +++++-- .../mq/BaseMdmDataSyncQueueReceiver.java | 169 +++++++++++++++++++++ .../apiservice/mq/MdmDataSyncQueueReceiver.java | 34 +++++ .../base/BaseBusiSyncMdmDataService.java | 139 +++++++++++++++++ .../busi/SysPojoVersionDetailService.java | 9 ++ .../busi/SysPojoVersionPlanService.java | 9 +- .../serviceimpl/mdm/SysToolSyncDataService.java | 64 ++++++++ pom.xml | 12 ++ 12 files changed, 522 insertions(+), 15 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/BaseMdmDataSyncQueueReceiver.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/BaseBusiSyncMdmDataService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/mdm/SysToolSyncDataService.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionDetailService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionDetailService.java index 2acc5f1..be8a8b7 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionDetailService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionDetailService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.api.iservice.busi; import cn.estsh.i3plus.pojo.platform.bean.SysPojoVersionDetail; import cn.estsh.impp.framework.base.service.ICrudService; +import io.swagger.annotations.ApiOperation; /** * @Description : @@ -11,4 +12,7 @@ import cn.estsh.impp.framework.base.service.ICrudService; * @Modify: **/ public interface ISysPojoVersionDetailService extends ICrudService { + + @ApiOperation("根据对象版本信息查询对象版本明细") + SysPojoVersionDetail getPojoVersionDetailByPojoVersionId(Long pojoVersionId); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionPlanService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionPlanService.java index aa124d4..c0aa302 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionPlanService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysPojoVersionPlanService.java @@ -16,4 +16,6 @@ public interface ISysPojoVersionPlanService extends ICacheCrudServicei3plus-icloud-softswitch + + i3plus.icloud + i3plus-icloud-mdm + + i3plus.pojo @@ -55,11 +60,17 @@ i3plus.pojo i3plus-pojo-model + i3plus.pojo i3plus-pojo-base + + i3plus.pojo + i3plus-pojo-mdm + + i3plus.core diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPojoVersionDetailController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPojoVersionDetailController.java index 2b06e9a..65e3115 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPojoVersionDetailController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysPojoVersionDetailController.java @@ -1,14 +1,20 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysPojoVersionDetailService; -import cn.estsh.i3plus.core.api.iservice.busi.ISysPojoVersionService; import cn.estsh.i3plus.platform.common.util.CommonConstWords; -import cn.estsh.i3plus.pojo.platform.bean.SysPojoVersion; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.SysPojoVersionDetail; import cn.estsh.impp.framework.base.controller.CrudBaseController; import cn.estsh.impp.framework.base.service.ICrudService; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -30,4 +36,27 @@ public class SysPojoVersionDetailController extends CrudBaseController { @Autowired private ISysPojoVersionPlanService pojoVersionService; @@ -42,9 +42,9 @@ public class SysPojoVersionPlanController extends CrudBaseController> masterDateRefMap = new HashMap<>(); + private static final HashMap> busiDateRefMap = new HashMap<>(); + private static final HashMap, BaseBusiSyncMdmDataService> syncServiceMap = new HashMap<>(); + + public void putMdmDataRef(Class syncService, Class mdmMasterClass, Class mdmBusiClass) { + masterDateRefMap.put(mdmMasterClass.getName(), syncService); + busiDateRefMap.put(mdmBusiClass.getName(), syncService); + } + + /** + * 获取同步服务 + * + * @param syncData + * @return + */ + private BaseBusiSyncMdmDataService getSyncService(MdmSyncData syncData) { + Class syncServiceClass = null; + + // 根据MdmClass查找对应关系 + if (CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(syncData.getIsMasterDataVal())) { + syncServiceClass = masterDateRefMap.get(syncData.getSyncDataClass()); + } else { + syncServiceClass = busiDateRefMap.get(syncData.getSyncDataClass()); + } + + if (syncServiceClass == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("【MDM同步关系未维护】MdmClass %s", syncData.getSyncDataClass()) + .setErrorSolution("维护Mdm同步关系") + .build(); + } + + // 根据同步服务Class获取服务对象 + BaseBusiSyncMdmDataService busiSyncMdmDataService = syncServiceMap.get(syncServiceClass); + if (busiSyncMdmDataService == null) { + busiSyncMdmDataService = SpringContextsUtil.getBean(syncServiceClass); + syncServiceMap.put(syncServiceClass, busiSyncMdmDataService); + } + if (busiSyncMdmDataService == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) + .setErrorDetail("【MDM同步服务为找到】SyncServiceClass %s", syncServiceClass) + .build(); + } + + return busiSyncMdmDataService; + } + + /** + * Mdm主数据同步 + * + * @param syncDataStr 消息 + * @param channel 通道 + * @param message 消息 + */ + public void processSyncMasterData(String syncDataStr, Channel channel, Message message) { + MdmSyncData syncData = null; + try { + LOGGER.info("【MQ-QUEUE_MDM_SYNC_MASTER_DATA_CORE】数据接收成功:{}", syncDataStr); + syncData = JsonUtilTool.decode(syncDataStr, MdmSyncData.class); + if (syncData == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) + .setErrorDetail("同步数据不存在") + .build(); + } + + // 同步数据类型 + BaseBusiSyncMdmDataService busiSyncMdmDataService = getSyncService(syncData); + + boolean isMaster = CommonEnumUtil.TRUE_OR_FALSE.valueOfBoolean(syncData.getIsMasterDataVal()); + + // 判断操作类型与同步数据类型调用对应的方法 + if (syncData.getSyncTypeVal() == MdmEnumUtil.MDM_SYNC_TYPE.INSERT.getValue()) { + if (isMaster) { + busiSyncMdmDataService.masterInsertSync(syncData); + } else { + busiSyncMdmDataService.busiInsertSync(syncData); + } + } else if (syncData.getSyncTypeVal() == MdmEnumUtil.MDM_SYNC_TYPE.UPDATE.getValue()) { + if (isMaster) { + busiSyncMdmDataService.masterUpdateSync(syncData); + } else { + busiSyncMdmDataService.busiUpdateSync(syncData); + } + } else if (syncData.getSyncTypeVal() == MdmEnumUtil.MDM_SYNC_TYPE.DELETE.getValue()) { + if (isMaster) { + busiSyncMdmDataService.masterDeleteSync(syncData); + } else { + busiSyncMdmDataService.busiDeleteSync(syncData); + } + } + + //信息已处理 + LOGGER.info("【MQ-QUEUE_MDM_SYNC_MASTER_DATA_CORE】数据处理成功:{}", syncDataStr); + } catch (Exception e) { + LOGGER.error("【MQ-QUEUE_MDM_SYNC_MASTER_DATA_CORE】处理出错:{}", syncData, e); + if (syncData != null) { + // 保存异常信息和堆栈数据 + syncData.setSyncFailDateTime(TimeTool.getNowTime(true)); + syncData.setSyncFailMessage(ExceptionUtils.getStackTrace(e)); + + //放入MDM 缓存中 + mdmRedis.putObject(getFailRedisKey(syncData), syncData, -1); + } + } finally { + try { + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + + private String getFailRedisKey(MdmSyncData syncData) { + return REDIS_MDM_SYNC_FAIL + "-" + syncData.getSyncSoftType() + ":" + syncData.getSyncDataClassSimpleName() + ":" + syncData.getSyncFailDateTime() + "-" + System.currentTimeMillis(); + } + + public abstract void syncMasterData(String syncDataStr, Channel channel, Message message); + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java new file mode 100644 index 0000000..b3300c8 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/mq/MdmDataSyncQueueReceiver.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.core.apiservice.mq; + +import cn.estsh.i3plus.core.apiservice.serviceimpl.mdm.SysToolSyncDataService; +import cn.estsh.i3plus.pojo.mdm.bean.busi.core.MdmGearCoreBusiExtd; +import com.rabbitmq.client.Channel; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Component; + +import static cn.estsh.i3plus.platform.common.util.MdmConstWords.QUEUE_MDM_SYNC_DATA_CORE; + +/** + * @Description : + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-05-28 16:54 + * @Modify: + **/ +@Component +public class MdmDataSyncQueueReceiver extends BaseMdmDataSyncQueueReceiver { + + /** + * 初始化类关系 + */ + public MdmDataSyncQueueReceiver() { + putMdmDataRef(SysToolSyncDataService.class, MdmGearCoreBusiExtd.mdmMasterClass, MdmGearCoreBusiExtd.class); + } + + @Override + @RabbitListener(queues = QUEUE_MDM_SYNC_DATA_CORE) + public void syncMasterData(String syncDataStr, Channel channel, Message message) { + processSyncMasterData(syncDataStr, channel, message); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/BaseBusiSyncMdmDataService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/BaseBusiSyncMdmDataService.java new file mode 100644 index 0000000..e0e1d16 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/BaseBusiSyncMdmDataService.java @@ -0,0 +1,139 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.icloud.mdm.sdk.base.IBaseMdmBusiExtdCloud; +import cn.estsh.i3plus.icloud.mdm.sdk.base.IBaseMdmBusiModelCloud; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mdm.bean.base.BaseMdmBusiModelBean; +import cn.estsh.i3plus.pojo.mdm.bean.base.MdmSyncData; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; + +import java.util.List; + +/** + * @Description : 业务同步setvice + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-05-15 17:58 + * @Modify: + **/ +public abstract class BaseBusiSyncMdmDataService { + + private IBaseMdmBusiExtdCloud baseMdmBusiExtdCloud; + + private IBaseMdmBusiModelCloud baseMdmBusiModelCloud; + + public BaseBusiSyncMdmDataService(IBaseMdmBusiExtdCloud baseMdmBusiExtdCloud, IBaseMdmBusiModelCloud baseMdmBusiModelCloud) { + this.baseMdmBusiExtdCloud = baseMdmBusiExtdCloud; + this.baseMdmBusiModelCloud = baseMdmBusiModelCloud; + } + + /** + * 主数据新增同步 + * @param syncData + */ + public void masterInsertSync(MdmSyncData syncData) { + baseMdmBusiExtdCloud.whiteDoProcessMissBusiExtdByMaster(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]), syncData.getSyncDateUserName()); + } + + /** + * 主数据修改同步 + * @param syncData + */ + public void masterUpdateSync(MdmSyncData syncData) { + BaseResultBean baseResultBean = + baseMdmBusiModelCloud.whiteFindByMasterIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()])); + if (!baseResultBean.isSuccess()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode()) + .setErrorDetail(baseResultBean.getErrorMsg()) + .build(); + } + + List modelBeanList = baseResultBean.getResultList(); + updateBusiList(transform(modelBeanList)); + } + + /** + * 主数据删除同步 + * @param syncData + */ + public void masterDeleteSync(MdmSyncData syncData) { + baseMdmBusiExtdCloud.whiteDeleteWeaklyByMasterIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()]),syncData.getSyncDateUserName()); + } + + /** + * 业务数据新增同步 + * @param syncData + */ + public void busiInsertSync(MdmSyncData syncData){ + BaseResultBean baseResultBean = + baseMdmBusiModelCloud.whiteFindByIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()])); + if (!baseResultBean.isSuccess()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode()) + .setErrorDetail(baseResultBean.getErrorMsg()) + .build(); + } + + List modelBeanList = baseResultBean.getResultList(); + insertBusiList(transform(modelBeanList)); + } + + /** + * 业务数据修改同步 + * @param syncData + */ + public void busiUpdateSync(MdmSyncData syncData){ + BaseResultBean baseResultBean = + baseMdmBusiModelCloud.findByIds(syncData.getSyncDataId().toArray(new Long[syncData.getSyncDataId().size()])); + if (!baseResultBean.isSuccess()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MDM.getCode()) + .setErrorCode(ImppExceptionEnum.CLOUD_CALL_EXCEPTION.getCode()) + .setErrorDetail(baseResultBean.getErrorMsg()) + .build(); + } + + List modelBeanList = baseResultBean.getResultList(); + updateBusiList(transform(modelBeanList)); + + } + + /** + * 业务数据删除同步 + * @param syncData + */ + public void busiDeleteSync(MdmSyncData syncData){ + deleteBusiList(syncData.getSyncDataId()); + } + + /** + * 类型转换 + * @param syncDataList + * @return + */ + public abstract List transform(List syncDataList); + + /** + * 新增业务数据 + * @param beanList + */ + public abstract void insertBusiList(List beanList); + + /** + * 修改业务数据 + * @param beanList + */ + public abstract void updateBusiList(List beanList); + + /** + * 删除业务数据 + * @param idList + */ + public abstract void deleteBusiList(List idList); + +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionDetailService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionDetailService.java index 3e06eb0..709069a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionDetailService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionDetailService.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysPojoVersionDetailService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.platform.bean.SysPojoVersionDetail; import cn.estsh.i3plus.pojo.platform.repository.SysPojoVersionDetailRepository; import cn.estsh.impp.framework.base.service.CrudService; @@ -25,4 +27,11 @@ public class SysPojoVersionDetailService extends CrudService getRepository() { return pojoVersionRDao; } + + @Override + public SysPojoVersionDetail getPojoVersionDetailByPojoVersionId(Long pojoVersionId) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(pojoVersionId,"pojoVersionId",ddlPackBean); + return pojoVersionRDao.getByProperty(ddlPackBean); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionPlanService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionPlanService.java index 8543237..8a655ec 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionPlanService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysPojoVersionPlanService.java @@ -8,7 +8,6 @@ import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.platform.bean.SysPojoVersionPlan; import cn.estsh.i3plus.pojo.platform.repository.SysPojoVersionPlanRepository; -import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; import cn.estsh.impp.framework.base.service.CacheCrudService; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import org.springframework.beans.factory.annotation.Autowired; @@ -48,4 +47,12 @@ public class SysPojoVersionPlanService extends CacheCrudService { + + @Autowired + private ISysToolService sysToolService; + + @Autowired + public SysToolSyncDataService(IBaseMdmBusiExtdCloud baseMdmBusiExtdCloud, IBaseMdmBusiModelCloud baseMdmBusiModelCloud) { + super(baseMdmBusiExtdCloud, baseMdmBusiModelCloud); + } + + @Override + public List transform(List syncDataList) { + return syncDataList.stream().map(gearCoreBusiModel -> { + SysTool sysTool = new SysTool(); + if (gearCoreBusiModel != null && gearCoreBusiModel.getBusi() != null && gearCoreBusiModel.getMaster() != null) { + sysTool.setName(gearCoreBusiModel.getMaster().getName()); + sysTool.setToolIp(gearCoreBusiModel.getMaster().getGearModel()); + sysTool.setToolDescription(gearCoreBusiModel.getBusi().getCoreNum()); + } + return sysTool; + }).collect(Collectors.toList()); + } + + @Override + public void insertBusiList(List beanList) { + for (SysTool sysTool : beanList) { + sysToolService.insertSysTool(sysTool); + } + } + + @Override + public void updateBusiList(List beanList) { + for (SysTool sysTool : beanList) { + sysToolService.updateSysTool(sysTool); + } + } + + @Override + public void deleteBusiList(List id) { + sysToolService.deleteSysToolByIds(id.toArray(new Long[id.size()])); + } +} diff --git a/pom.xml b/pom.xml index d566f1d..055ff17 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,12 @@ ${project.version} + + i3plus.icloud + i3plus-icloud-mdm + ${project.version} + + i3plus.pojo @@ -101,6 +107,12 @@ ${project.version} + + i3plus.pojo + i3plus-pojo-mdm + ${project.version} + + i3plus.core