Преглед на файлове

分支提交:架构层级管理实体基础服务,提供相应数据的增删改服务。

lvxianyun преди 3 години
родител
ревизия
8d667a60e9
променени са 52 файла, в които са добавени 2757 реда и са изтрити 14 реда
  1. 23 7
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/DigitalMessageHelper.java
  2. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java
  3. 2 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/entity/ObjectDigital.java
  4. 1 1
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/handler/ProjectMessageHandler.java
  5. 72 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/controller/ObjectProjectController.java
  6. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectBuildingMapper.java
  7. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectEquipmentMapper.java
  8. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectFloorMapper.java
  9. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectProjectMapper.java
  10. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectShaftMapper.java
  11. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectSpaceMapper.java
  12. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectSystemMapper.java
  13. 13 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectTenantMapper.java
  14. 36 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectBuilding.java
  15. 82 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectEquipment.java
  16. 61 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectFloor.java
  17. 37 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectProject.java
  18. 38 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectShaft.java
  19. 105 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectSpace.java
  20. 46 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectSystem.java
  21. 51 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectTenant.java
  22. 27 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ApplicationContextUtil.java
  23. 19 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/IObjectProcessor.java
  24. 48 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectBuildingProcessor.java
  25. 49 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectEquipmentProcessor.java
  26. 48 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectFloorProcessor.java
  27. 85 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectMessageHandler.java
  28. 61 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectProcessor.java
  29. 47 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectProjectProcessor.java
  30. 48 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectShaftProcessor.java
  31. 48 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectSpaceProcessor.java
  32. 48 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectSystemProcessor.java
  33. 48 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectTenantProcessor.java
  34. 56 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectBuildingService.java
  35. 56 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectEquipmentService.java
  36. 56 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectFloorService.java
  37. 56 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectProjectService.java
  38. 56 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectShaftService.java
  39. 56 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectSpaceService.java
  40. 57 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectSystemService.java
  41. 57 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectTenantService.java
  42. 106 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectBuildingServiceImpl.java
  43. 106 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectEquipmentServiceImpl.java
  44. 106 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectFloorServiceImpl.java
  45. 105 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectProjectServiceImpl.java
  46. 105 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectShaftServiceImpl.java
  47. 104 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectSpaceServiceImpl.java
  48. 104 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectSystemServiceImpl.java
  49. 105 0
      dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectTenantServiceImpl.java
  50. 227 0
      dmp-business/dmp-rwd/src/main/resources/db/init/schema.sql
  51. 0 1
      dmp-common/src/main/java/com/persagy/dmp/common/model/entity/BaseEntity.java
  52. 4 4
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/model/DigitalManageMessage.java

+ 23 - 7
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/basic/utils/DigitalMessageHelper.java

@@ -1,10 +1,15 @@
 package com.persagy.dmp.rwd.basic.utils;
 
-import cn.hutool.json.JSONUtil;
-import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dmp.amqp.handler.RabbitMessageSender;
-import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
 import com.persagy.dmp.basic.model.DigitalManageMessage;
+import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -18,6 +23,8 @@ public class DigitalMessageHelper {
 
     @Autowired
     private RabbitMessageSender messageSender;
+    @Autowired
+    private ObjectMapper objectMapper;
 
     /**
      * 发送消息
@@ -30,18 +37,27 @@ public class DigitalMessageHelper {
         DigitalManageMessage message = new DigitalManageMessage();
         message.setOperatorType(operator);
         message.setOperatorObj(newVO.getClass().getSimpleName());
-        message.setOldObj(oldVO);
-        message.setNewObj(newVO);
+        ObjectNode newNode = JsonNodeUtils.toObjectNode(newVO, "infos", null);
+        ObjectNode oldNode = JsonNodeUtils.toObjectNode(newVO, "infos", null);
+        message.setOldObj(oldNode);
+        message.setNewObj(newNode);
+
+        String json = "";
+        try {
+            json = objectMapper.writeValueAsString(message);
+        } catch (JsonProcessingException e) {
+            throw new BusinessException(ResponseCode.A0427.getCode(), ResponseCode.A0427.getDesc());
+        }
         // 同步消息
         if(syncFlag) {
             messageSender.sendAndReceive(DigitalMessageConstant.MESSAGE_EXCHANGE,
                     DigitalMessageConstant.MESSAGE_ROUTING,
-                    JSONUtil.toJsonStr(message));
+                    json);
         } else {
             // 异步消息
             messageSender.send(DigitalMessageConstant.MESSAGE_EXCHANGE,
                     DigitalMessageConstant.MESSAGE_ROUTING,
-                    JSONUtil.toJsonStr(message));
+                    json);
         }
     }
 }

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/controller/ObjectDigitalController.java

@@ -51,7 +51,7 @@ public class ObjectDigitalController {
         // 添加所属项目条件
         ConditionUtil.ensureProjectCriteria(wrapper);
         // 处理扩展条件
-        ensureExtraCond(wrapper, criteria.getCriteria());
+         ensureExtraCond(wrapper, criteria.getCriteria());
         // 转换查询条件
         QueryCriteriaHelper.toWrapper(wrapper, criteria);
         Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);

+ 2 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/entity/ObjectDigital.java

@@ -33,6 +33,8 @@ public class ObjectDigital extends AuditableEntity {
     private String classCode;
     /** 组标识 */
     private Integer grouping;
+    /** 集团编码 */
+    private String groupCode;
     /** 边类型编码 */
     @TableField(typeHandler = JacksonTypeHandler.class)
     private ObjectNode infos;

+ 1 - 1
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/digital/handler/ProjectMessageHandler.java

@@ -48,7 +48,7 @@ public class ProjectMessageHandler extends AbstractRabbitHandlerTemplate {
             initContextInfo(msgVO);
             ObjectDigital project = msgVO.toObjectDigital();
             // 幂等处理 - 检查是否已经存在
-            ObjectDigital dbVO = digitalService.load(project.getId());
+            ObjectDigital dbVO  = digitalService.load(project.getId());
             if(dbVO == null) {
                 digitalService.insert(CollUtil.newArrayList(project));
             } else {

+ 72 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/controller/ObjectProjectController.java

@@ -0,0 +1,72 @@
+package com.persagy.dmp.rwd.twin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import com.persagy.dmp.rwd.twin.entity.ObjectProject;
+import com.persagy.dmp.rwd.twin.service.IObjectProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+@RestController
+@RequestMapping("/rwd/instance/project")
+public class ObjectProjectController {
+    
+    @Autowired
+    IObjectProjectService service;
+
+    @PostMapping("/createOne")
+    public CommonResult<ObjectProject> create(@Valid @RequestBody ObjectNode node){
+        ObjectProject vo = JsonNodeUtils.toEntity(node, ObjectProject.class, "infos");
+        List<ObjectProject> voList = CollUtil.newArrayList(vo);
+        service.insert(voList);
+        return ResultHelper.single(vo);
+    }
+
+    @PostMapping("/create")
+    public CommonResult<List<ObjectProject>> createBatch(@Valid @RequestBody ArrayNode array){
+        List<ObjectProject> voList = JsonNodeUtils.toEntity(array, ObjectProject.class, "infos");
+        voList = service.insert(voList);
+        return ResultHelper.multi(voList);
+    }
+
+    @PostMapping("/updateOne")
+    public CommonResult<ObjectProject> update(@Valid @RequestBody ObjectNode node){
+        ObjectProject vo = JsonNodeUtils.toEntity(node, ObjectProject.class, "infos");
+        List<ObjectProject> voList = CollUtil.newArrayList(vo);
+        service.update(voList);
+        return ResultHelper.single(vo);
+    }
+
+    @PostMapping("/update")
+    public CommonResult<List<ObjectProject>> updateBatch(@Valid @RequestBody ArrayNode array){
+        List<ObjectProject> voList = JsonNodeUtils.toEntity(array, ObjectProject.class, "infos");
+        voList = service.update(voList);
+        return ResultHelper.multi(voList);
+    }
+
+    @PostMapping("/deleteOne")
+    public CommonResult delete(@RequestBody String id){
+        service.delete(CollUtil.newArrayList(id));
+        return ResultHelper.success();
+    }
+
+    @PostMapping("/delete")
+    public CommonResult deleteBatch(@RequestBody List<String> id){
+        service.delete(id);
+        return ResultHelper.success();
+    }
+}

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectBuildingMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectBuilding;
+
+/**
+ * 建筑 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectBuildingMapper extends BaseMapper<ObjectBuilding> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectEquipmentMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectEquipment;
+
+/**
+ * 设备 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectEquipmentMapper extends BaseMapper<ObjectEquipment> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectFloorMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectFloor;
+
+/**
+ * 楼层 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectFloorMapper extends BaseMapper<ObjectFloor> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectProjectMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectProject;
+
+/**
+ * 项目 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+public interface ObjectProjectMapper extends BaseMapper<ObjectProject> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectShaftMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectShaft;
+
+/**
+ * 竖井 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectShaftMapper extends BaseMapper<ObjectShaft> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectSpaceMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectSpace;
+
+/**
+ * 空间 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectSpaceMapper extends BaseMapper<ObjectSpace> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectSystemMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectSystem;
+
+/**
+ * 系统 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectSystemMapper extends BaseMapper<ObjectSystem> {
+}
+

+ 13 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/dao/ObjectTenantMapper.java

@@ -0,0 +1,13 @@
+package com.persagy.dmp.rwd.twin.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectTenant;
+
+/**
+ * 租户 数据DAO
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface ObjectTenantMapper extends BaseMapper<ObjectTenant> {
+}
+

+ 36 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectBuilding.java

@@ -0,0 +1,36 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 建筑
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_building",autoResultMap = true)
+public class ObjectBuilding extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 82 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectEquipment.java

@@ -0,0 +1,82 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 环境
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_equipment",autoResultMap = true)
+public class ObjectEquipment extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+
+    /** BIM模型中坐标 */
+    private String bimLocation;
+    /** 二维码图片 */
+    private String qrCode;
+    /** 设计图纸中编码 */
+    private String cadId;
+    /** 部件关联设备的id */
+    private String parentId;
+    /** 资产id */
+    private String propertyId;
+    /** 坐标x,y,z */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode location;
+    /** 分类名 */
+    private String categoryName;
+    /** 项目自定义类型 */
+    private String customCategory;
+    /** 任务状态 */
+    private Integer taskState;
+    /** 模型id */
+    private String modelId;
+    /** 贴码状态 */
+    private Integer codeType;
+    /** 设备序号 */
+    private Integer equipSerial;
+    /** Revit族 */
+    private String familyName;
+    /** Revit族类型 */
+    private String familySymbol;
+    /** 备注 */
+    private String note;
+    /** BIM构建编码 */
+    private String bimTypeId;
+    /** 分类 */
+    private String classCode;
+    /** 客户端id */
+    private String appId;
+    /** 添加人员 */
+    private String findPeople;
+    /** RFID标识 */
+    private String rfId;
+    /** 平台二维码 */
+    private String defaultQrCode;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 61 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectFloor.java

@@ -0,0 +1,61 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 楼层
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_floor",autoResultMap = true)
+public class ObjectFloor extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+    /** 楼层顺序号 */
+    private Integer sequenceId;
+    /** 楼层平面图分割标记 */
+    private Integer sign;
+    /** 模型文件id */
+    private String modelId;
+    /** 楼层选定区域轮廓线 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode  outline;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+    /** 二维码图片 */
+    private String qrCode;
+    /** 楼板标高 */
+    private Integer floorElevation;
+    /** BIMID前缀 */
+    private String bimIdPre;
+    /** 自定义信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode properties;
+    /** 坐标 */
+    private String bimLocation;
+    /** 人数 */
+    private Integer permanentPeopleNum;
+
+}

+ 37 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectProject.java

@@ -0,0 +1,37 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 项目数据
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_project",autoResultMap = true)
+public class ObjectProject extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 项目密码 */
+    private String password;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 38 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectShaft.java

@@ -0,0 +1,38 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 竖井
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_shaft",autoResultMap = true)
+public class ObjectShaft extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** BIM本地名称 */
+    private String bimLocation;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 105 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectSpace.java

@@ -0,0 +1,105 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 空间
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_space",autoResultMap = true)
+public class ObjectSpace extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+    /** 楼层ID */
+    private String floorId;
+
+    /** 楼层选定区域轮廓线 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode outline;
+    /** 轮廓线2 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode outline2;
+    /** 图片 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode pic;
+
+    /** 项目空间功能区类型 */
+    private String projRoomFuncType;
+    /** 空间序号 */
+    private Float roomSerial;
+    /** 平台二维码 */
+    private String defaultQrCode;
+    /** BIM模型中坐标 */
+    private String bimLocation;
+    /** 井深 */
+    private Float depth;
+    /** 面宽 */
+    private Float width;
+    /** 建筑面积 */
+    private Float buildArea;
+    /** 使用面积 */
+    private Float netArea;
+    /** 高 */
+    private Float height;
+    /** 备注文字 */
+    private String intro;
+    /** 配电容量 */
+    private Float elecCap;
+    /** 污染等级 */
+    private String pollutionDegree;
+    /** 空间功能区类型 */
+    private String funcType;
+    /** 租户信息 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode tenantInfo;
+    /** 动态信息 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode dynamicInfor;
+    /** 空间朝向 */
+    private String zoneOrientation;
+    /** 设计供冷功率 */
+    private Float ratedCoolingp;
+    /** 设计供热功率 */
+    private Float ratedHeatingp;
+    /** 空调形式 */
+    private String acType;
+    /** 设计照明功率 */
+    private Float ratedLightp;
+    /** 内外区分类 */
+    private String zoneType;
+    /** 空间是否受影响 */
+    private String state;
+    /** 租赁业态类型 */
+    private Integer tenantType;
+    /** 所属租户 */
+    private String tenant;
+    /** 空间二维码 */
+    private String qrCodePic;
+    /** 空间常驻人数 */
+    private Integer permanentPeopleNum;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 46 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectSystem.java

@@ -0,0 +1,46 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 系统
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_system",autoResultMap = true)
+public class ObjectSystem extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** CADID */
+    private String cadId;
+    /** BIM模型中编码 */
+    private String bimId;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 建筑ID */
+    private String buildingId;
+    /** 楼层ID */
+    private String floorId;
+    /** 类型编码 */
+    private String classCode;
+    /** 分类名 */
+    private String categoryName;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 51 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/entity/ObjectTenant.java

@@ -0,0 +1,51 @@
+package com.persagy.dmp.rwd.twin.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.common.model.entity.AuditableEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 租户
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "dt_object_tenant",autoResultMap = true)
+public class ObjectTenant extends AuditableEntity {
+
+    /** 名称 */
+    private String name;
+    /** 本地编码 */
+    private String localId;
+    /** 本地名称 */
+    private String localName;
+    /** 本地编码2 */
+    private String localId2;
+    /** 本地名称2 */
+    private String localName2;
+    /** 项目ID */
+    private String projectId;
+    /** 集团编码 */
+    private String groupCode;
+
+    /** 租赁信息 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode leaseInfo;
+    /** 能耗信息 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode consumptionInfo;
+    /** 动态信息 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode dynamicInfor;
+    /** 自定义信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode customParam;
+    /** 信息点 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
+    private ObjectNode infos;
+}

+ 27 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ApplicationContextUtil.java

@@ -0,0 +1,27 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+@Component
+public class ApplicationContextUtil implements ApplicationContextAware {
+    private static  ApplicationContext act;
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        act = applicationContext;
+    }
+    /**
+     * 根据bean的名字获取工厂中对应的bean对象
+     * @param beanName
+     * @return
+     */
+    public static Object getBean(String beanName){
+        return act.getBean(beanName);
+    }
+}

+ 19 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/IObjectProcessor.java

@@ -0,0 +1,19 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public interface IObjectProcessor {
+
+    //public List<?> save();
+    //public List<?> update();
+
+    public void dealData(ObjectDigital objectDigital);
+
+    //public List<String> delete();
+
+
+}

+ 48 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectBuildingProcessor.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectBuilding;
+import com.persagy.dmp.rwd.twin.service.IObjectBuildingService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectBuildingProcessor implements IObjectProcessor{
+
+    private IObjectBuildingService objectBuildingServic = (IObjectBuildingService) ApplicationContextUtil.getBean("objectBuildingServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectBuilding ObjectBuilding) {
+        ObjectBuilding objOld = objectBuildingServic.load(ObjectBuilding.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectBuilding ObjectBuilding = getObjectBuilding(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectBuilding)){
+            objectBuildingServic.insert(CollUtil.newArrayList(ObjectBuilding));
+        }else{
+            objectBuildingServic.update(CollUtil.newArrayList(ObjectBuilding));
+        }
+    }
+
+    private static ObjectBuilding getObjectBuilding(ObjectDigital objectDigital){
+        ObjectBuilding building = new ObjectBuilding();
+        building.setId(objectDigital.getId());
+        building.setProjectId(objectDigital.getProjectId());
+        building.setLocalId(objectDigital.getLocalId());
+        building.setLocalName(objectDigital.getLocalName());
+        building.setGroupCode(objectDigital.getGroupCode());
+        building.setName(objectDigital.getName());
+        building.setInfos(objectDigital.getInfos());
+        return building;
+    }
+}

+ 49 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectEquipmentProcessor.java

@@ -0,0 +1,49 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectEquipment;
+import com.persagy.dmp.rwd.twin.service.IObjectEquipmentService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectEquipmentProcessor implements IObjectProcessor{
+
+    private IObjectEquipmentService objectEquipmentServic = (IObjectEquipmentService) ApplicationContextUtil.getBean("objectEquipmentServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectEquipment ObjectEquipment) {
+        ObjectEquipment objOld = objectEquipmentServic.load(ObjectEquipment.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectEquipment ObjectEquipment = getObjectEquipment(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectEquipment)){
+            objectEquipmentServic.insert(CollUtil.newArrayList(ObjectEquipment));
+        }else{
+            objectEquipmentServic.update(CollUtil.newArrayList(ObjectEquipment));
+        }
+    }
+
+    private static ObjectEquipment getObjectEquipment(ObjectDigital objectDigital){
+        ObjectEquipment equipment = new ObjectEquipment();
+        equipment.setId(objectDigital.getId());
+        equipment.setProjectId(objectDigital.getProjectId());
+        equipment.setLocalId(objectDigital.getLocalId());
+        equipment.setLocalName(objectDigital.getLocalName());
+        equipment.setGroupCode(objectDigital.getGroupCode());
+        equipment.setName(objectDigital.getName());
+        equipment.setInfos(objectDigital.getInfos());
+        return equipment;
+    }
+}
+

+ 48 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectFloorProcessor.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectFloor;
+import com.persagy.dmp.rwd.twin.service.IObjectFloorService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectFloorProcessor  implements IObjectProcessor{
+
+    private IObjectFloorService objectFloorServic = (IObjectFloorService) ApplicationContextUtil.getBean("objectFloorServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectFloor ObjectFloor) {
+        ObjectFloor objOld = objectFloorServic.load(ObjectFloor.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectFloor ObjectFloor = getObjectFloor(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectFloor)){
+            objectFloorServic.insert(CollUtil.newArrayList(ObjectFloor));
+        }else{
+            objectFloorServic.update(CollUtil.newArrayList(ObjectFloor));
+        }
+    }
+
+    private static ObjectFloor getObjectFloor(ObjectDigital objectDigital){
+        ObjectFloor floor = new ObjectFloor();
+        floor.setId(objectDigital.getId());
+        floor.setProjectId(objectDigital.getProjectId());
+        floor.setLocalId(objectDigital.getLocalId());
+        floor.setLocalName(objectDigital.getLocalName());
+        floor.setGroupCode(objectDigital.getGroupCode());
+        floor.setName(objectDigital.getName());
+        floor.setInfos(objectDigital.getInfos());
+        return floor;
+    }
+}

+ 85 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectMessageHandler.java

@@ -0,0 +1,85 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dmp.amqp.handler.AbstractRabbitHandlerTemplate;
+import com.persagy.dmp.basic.model.DigitalManageMessage;
+import com.persagy.dmp.basic.utils.JsonNodeUtils;
+import com.persagy.dmp.common.constant.CommonConstant;
+import com.persagy.dmp.common.context.AppContext;
+import com.persagy.dmp.common.exception.BusinessException;
+import com.persagy.dmp.mybatis.helper.DynamicDataSourceHelper;
+import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.service.IObjectProjectService;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.Exchange;
+import org.springframework.amqp.rabbit.annotation.Queue;
+import org.springframework.amqp.rabbit.annotation.QueueBinding;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+/**
+ * 项目消息消费
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+@Slf4j
+@Component
+
+@RabbitListener(bindings = @QueueBinding(
+        value = @Queue(name = "digital-change-queue", durable = "true"),
+        exchange = @Exchange(name = DigitalMessageConstant.MESSAGE_EXCHANGE,
+                ignoreDeclarationExceptions = "true"), key = DigitalMessageConstant.MESSAGE_ROUTING
+))
+public class ObjectMessageHandler extends AbstractRabbitHandlerTemplate {
+    @Autowired
+    private ObjectMapper objectMapper;
+    @Autowired
+    private IObjectProjectService objectProjectService;
+
+    /**
+     * 消费
+     * @param message 消息体字符串
+     * @param channel 通道对象
+     * @param vo     消息对象
+     */
+    @Override
+    protected void handler(String message, Channel channel, Message vo) {
+        try {
+            DigitalManageMessage msgVO = objectMapper.readValue(message, DigitalManageMessage.class);
+            ObjectNode msgObj = msgVO.getNewObj();
+            ObjectDigital currVO = JsonNodeUtils.toEntity(msgObj, ObjectDigital.class, "infos");
+            initContextInfo(currVO);
+            //处理数据:1.幂等校验; 2.处理数据
+            ObjectProcessor.dealObject(currVO.getObjType(),currVO);
+
+        } catch (IOException e) {
+             log.error(e.getMessage(), e);
+            throw new BusinessException(e.getMessage(), e);
+        }
+    }
+
+    /**
+     * 初始化上下文,切换数据源
+     * @param vo
+     */
+    private void initContextInfo(ObjectDigital vo) {
+        AppContext.getContext().setGroupCode(vo.getGroupCode());
+        AppContext.getContext().setProjectId(vo.getId());
+        AppContext.getContext().setAppId("BOSS");
+        String userId = vo.getModifier();
+        // 无用户时,默认为默认系统用户
+        if(StrUtil.isBlank(userId)) {
+            userId = CommonConstant.DEFAULT_ID;
+        }
+        AppContext.getContext().setAccountId(userId);
+        DynamicDataSourceHelper.loadDataSource();
+    }
+}

+ 61 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectProcessor.java

@@ -0,0 +1,61 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.map.MapUtil;
+import com.persagy.dmp.rwd.basic.constant.DigitalObjectType;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/10
+ */
+public class ObjectProcessor {
+
+    private static Map<String, IObjectProcessor> processors = new HashMap<>(16);
+
+    /**
+     * 处理数据:1.幂等校验; 2.处理数据
+     */
+    public static void dealObject(String objType, ObjectDigital vo) {
+        getProcessor(objType).dealData(vo);
+    }
+
+
+    private static IObjectProcessor getProcessor(String objType) {
+        if(MapUtil.isEmpty(processors) || !processors.containsKey(objType)) {
+            putProcessor(objType);
+        }
+        return processors.get(objType);
+    }
+
+
+    private static void putProcessor(String objType){
+        if(DigitalObjectType.PROJECT.getIndex().equals(objType)){
+            processors.put(objType, new ObjectProjectProcessor());
+
+        }else if(DigitalObjectType.BUILDING.getIndex().equals(objType)){
+            processors.put(objType, new ObjectBuildingProcessor());
+
+        }else if(DigitalObjectType.FLOOR.getIndex().equals(objType)){
+            processors.put(objType, new ObjectFloorProcessor());
+
+        }else if(DigitalObjectType.SPACE.getIndex().equals(objType)){
+            processors.put(objType, new ObjectSpaceProcessor());
+
+        }else if(DigitalObjectType.EQUIPMENT.getIndex().equals(objType)){
+            processors.put(objType, new ObjectEquipmentProcessor());
+
+        }else if(DigitalObjectType.SYSTEM.getIndex().equals(objType)){
+            processors.put(objType, new ObjectSystemProcessor());
+
+        }else if(DigitalObjectType.SHAFT.getIndex().equals(objType)){
+            processors.put(objType, new ObjectShaftProcessor());
+        }else{
+            //租户
+            processors.put(objType, new ObjectTenantProcessor());
+        }
+    }
+
+}

+ 47 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectProjectProcessor.java

@@ -0,0 +1,47 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectProject;
+import com.persagy.dmp.rwd.twin.service.IObjectProjectService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/11
+ */
+public class ObjectProjectProcessor implements IObjectProcessor {
+
+    private IObjectProjectService objectProjectService = (IObjectProjectService) ApplicationContextUtil.getBean("objectProjectServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectProject objectProject) {
+        ObjectProject objOld = objectProjectService.load(objectProject.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectProject objectProject = getObjectProject(objectDigital);
+        //幂等验证
+        if(idempotentCheck(objectProject)){
+            objectProjectService.insert(CollUtil.newArrayList(objectProject));
+        }else{
+            objectProjectService.update(CollUtil.newArrayList(objectProject));
+        }
+    }
+
+    private static ObjectProject getObjectProject(ObjectDigital objectDigital){
+        ObjectProject objectProject = new ObjectProject();
+        objectProject.setId(objectDigital.getProjectId());
+        objectProject.setLocalId(objectDigital.getLocalId());
+        objectProject.setLocalName(objectDigital.getLocalName());
+        objectProject.setGroupCode(objectDigital.getGroupCode());
+        objectProject.setName(objectDigital.getName());
+        objectProject.setInfos(objectDigital.getInfos());
+        return objectProject;
+    }
+}

+ 48 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectShaftProcessor.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectShaft;
+import com.persagy.dmp.rwd.twin.service.IObjectShaftService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectShaftProcessor implements IObjectProcessor{
+
+    private IObjectShaftService objectShaftServic = (IObjectShaftService) ApplicationContextUtil.getBean("objectShaftServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectShaft ObjectShaft) {
+        ObjectShaft objOld = objectShaftServic.load(ObjectShaft.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectShaft ObjectShaft = getObjectShaft(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectShaft)){
+            objectShaftServic.insert(CollUtil.newArrayList(ObjectShaft));
+        }else{
+            objectShaftServic.update(CollUtil.newArrayList(ObjectShaft));
+        }
+    }
+
+    private static ObjectShaft getObjectShaft(ObjectDigital objectDigital){
+        ObjectShaft shaft = new ObjectShaft();
+        shaft.setId(objectDigital.getId());
+        shaft.setProjectId(objectDigital.getProjectId());
+        shaft.setLocalId(objectDigital.getLocalId());
+        shaft.setLocalName(objectDigital.getLocalName());
+        shaft.setGroupCode(objectDigital.getGroupCode());
+        shaft.setName(objectDigital.getName());
+        shaft.setInfos(objectDigital.getInfos());
+        return shaft;
+    }
+}

+ 48 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectSpaceProcessor.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectSpace;
+import com.persagy.dmp.rwd.twin.service.IObjectSpaceService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectSpaceProcessor implements IObjectProcessor{
+
+    private IObjectSpaceService objectSpaceServic = (IObjectSpaceService) ApplicationContextUtil.getBean("objectSpaceServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectSpace ObjectSpace) {
+        ObjectSpace objOld = objectSpaceServic.load(ObjectSpace.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectSpace ObjectSpace = getObjectSpace(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectSpace)){
+            objectSpaceServic.insert(CollUtil.newArrayList(ObjectSpace));
+        }else{
+            objectSpaceServic.update(CollUtil.newArrayList(ObjectSpace));
+        }
+    }
+
+    private static ObjectSpace getObjectSpace(ObjectDigital objectDigital){
+        ObjectSpace space = new ObjectSpace();
+        space.setId(objectDigital.getId());
+        space.setProjectId(objectDigital.getProjectId());
+        space.setLocalId(objectDigital.getLocalId());
+        space.setLocalName(objectDigital.getLocalName());
+        space.setGroupCode(objectDigital.getGroupCode());
+        space.setName(objectDigital.getName());
+        space.setInfos(objectDigital.getInfos());
+        return space;
+    }
+}

+ 48 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectSystemProcessor.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectSystem;
+import com.persagy.dmp.rwd.twin.service.IObjectSystemService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectSystemProcessor implements IObjectProcessor{
+
+    private IObjectSystemService objectSystemServic = (IObjectSystemService) ApplicationContextUtil.getBean("objectSystemServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectSystem ObjectSystem) {
+        ObjectSystem objOld = objectSystemServic.load(ObjectSystem.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectSystem ObjectSystem = getObjectSystem(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectSystem)){
+            objectSystemServic.insert(CollUtil.newArrayList(ObjectSystem));
+        }else{
+            objectSystemServic.update(CollUtil.newArrayList(ObjectSystem));
+        }
+    }
+
+    private static ObjectSystem getObjectSystem(ObjectDigital objectDigital){
+        ObjectSystem system = new ObjectSystem();
+        system.setId(objectDigital.getId());
+        system.setProjectId(objectDigital.getProjectId());
+        system.setLocalId(objectDigital.getLocalId());
+        system.setLocalName(objectDigital.getLocalName());
+        system.setGroupCode(objectDigital.getGroupCode());
+        system.setName(objectDigital.getName());
+        system.setInfos(objectDigital.getInfos());
+        return system;
+    }
+}

+ 48 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/handler/ObjectTenantProcessor.java

@@ -0,0 +1,48 @@
+package com.persagy.dmp.rwd.twin.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
+import com.persagy.dmp.rwd.twin.entity.ObjectTenant;
+import com.persagy.dmp.rwd.twin.service.IObjectTenantService;
+
+/**
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public class ObjectTenantProcessor implements IObjectProcessor{
+
+    private IObjectTenantService objectTenantServic = (IObjectTenantService) ApplicationContextUtil.getBean("objectTenantServic");
+
+    /** 幂等校验*/
+    private boolean idempotentCheck(ObjectTenant ObjectTenant) {
+        ObjectTenant objOld = objectTenantServic.load(ObjectTenant.getId());
+        if(objOld == null){
+            return true;
+        }else{
+            return false;
+        }
+    }
+
+    @Override
+    public void dealData(ObjectDigital objectDigital) {
+        ObjectTenant ObjectTenant = getObjectTenant(objectDigital);
+        //幂等验证
+        if(idempotentCheck(ObjectTenant)){
+            objectTenantServic.insert(CollUtil.newArrayList(ObjectTenant));
+        }else{
+            objectTenantServic.update(CollUtil.newArrayList(ObjectTenant));
+        }
+    }
+
+    private static ObjectTenant getObjectTenant(ObjectDigital objectDigital){
+        ObjectTenant tenant = new ObjectTenant();
+        tenant.setId(objectDigital.getId());
+        tenant.setProjectId(objectDigital.getProjectId());
+        tenant.setLocalId(objectDigital.getLocalId());
+        tenant.setLocalName(objectDigital.getLocalName());
+        tenant.setGroupCode(objectDigital.getGroupCode());
+        tenant.setName(objectDigital.getName());
+        tenant.setInfos(objectDigital.getInfos());
+        return tenant;
+    }
+}

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectBuildingService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectBuilding;
+
+import java.util.List;
+
+/**
+ * 建筑 接口
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public interface IObjectBuildingService {
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectBuilding load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectBuilding> queryByCondition(Wrapper<ObjectBuilding> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectBuilding> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectBuilding> insert(List<ObjectBuilding> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectBuilding> update(List<ObjectBuilding> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectEquipmentService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectEquipment;
+
+import java.util.List;
+
+/**
+ * 设备 接口
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public interface IObjectEquipmentService {
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectEquipment load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectEquipment> queryByCondition(Wrapper<ObjectEquipment> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectEquipment> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectEquipment> insert(List<ObjectEquipment> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectEquipment> update(List<ObjectEquipment> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectFloorService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectFloor;
+
+import java.util.List;
+
+/**
+ * 楼层 接口
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+public interface IObjectFloorService {
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectFloor load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectFloor> queryByCondition(Wrapper<ObjectFloor> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectFloor> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectFloor> insert(List<ObjectFloor> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectFloor> update(List<ObjectFloor> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectProjectService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectProject;
+
+import java.util.List;
+
+/**
+ * 项目 接口
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+public interface IObjectProjectService {
+    /**
+     * 通过ID、集团编码 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectProject load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectProject> queryByCondition(Wrapper<ObjectProject> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectProject> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectProject> insert(List<ObjectProject> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectProject> update(List<ObjectProject> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectShaftService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectShaft;
+
+import java.util.List;
+
+/**
+ * 竖井 接口
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+public interface IObjectShaftService {
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectShaft load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectShaft> queryByCondition(Wrapper<ObjectShaft> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectShaft> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectShaft> insert(List<ObjectShaft> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectShaft> update(List<ObjectShaft> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 56 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectSpaceService.java

@@ -0,0 +1,56 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectSpace;
+
+import java.util.List;
+
+/**
+ * 空间 接口
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+public interface IObjectSpaceService {
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectSpace load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectSpace> queryByCondition(Wrapper<ObjectSpace> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectSpace> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectSpace> insert(List<ObjectSpace> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectSpace> update(List<ObjectSpace> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 57 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectSystemService.java

@@ -0,0 +1,57 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectSystem;
+
+import java.util.List;
+
+/**
+ * 系统 接口
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public interface IObjectSystemService {
+
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectSystem load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectSystem> queryByCondition(Wrapper<ObjectSystem> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectSystem> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectSystem> insert(List<ObjectSystem> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectSystem> update(List<ObjectSystem> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 57 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/IObjectTenantService.java

@@ -0,0 +1,57 @@
+package com.persagy.dmp.rwd.twin.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.rwd.twin.entity.ObjectTenant;
+
+import java.util.List;
+
+/**
+ * 租户 接口
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+public interface IObjectTenantService {
+
+    /**
+     * 查询
+     * @param id 主键
+     * @return
+     */
+    ObjectTenant load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectTenant> queryByCondition(Wrapper<ObjectTenant> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectTenant> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectTenant> insert(List<ObjectTenant> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectTenant> update(List<ObjectTenant> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 106 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectBuildingServiceImpl.java

@@ -0,0 +1,106 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectBuildingMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectBuilding;
+import com.persagy.dmp.rwd.twin.service.IObjectBuildingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 建筑 接口实现类
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+@Service("objectBuildingServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectBuildingServiceImpl implements IObjectBuildingService {
+
+    @Resource
+    private ObjectBuildingMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectBuilding load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectBuilding> queryByCondition(Wrapper<ObjectBuilding> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectBuilding> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectBuilding> insert(List<ObjectBuilding> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectBuilding> update(List<ObjectBuilding> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectBuilding> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectBuilding> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectBuilding dbVO = MapUtil.get(dbMap, vo.getId(), ObjectBuilding.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectBuilding> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectBuilding> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectBuilding dbVO = MapUtil.get(dbMap, id, ObjectBuilding.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectBuilding vo = new ObjectBuilding();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+
+}

+ 106 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectEquipmentServiceImpl.java

@@ -0,0 +1,106 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectEquipmentMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectEquipment;
+import com.persagy.dmp.rwd.twin.service.IObjectEquipmentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 设备 接口实现类
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+@Service("objectEquipmentServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectEquipmentServiceImpl implements IObjectEquipmentService {
+
+
+    @Resource
+    private ObjectEquipmentMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectEquipment load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectEquipment> queryByCondition(Wrapper<ObjectEquipment> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectEquipment> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectEquipment> insert(List<ObjectEquipment> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectEquipment> update(List<ObjectEquipment> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectEquipment> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectEquipment> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectEquipment dbVO = MapUtil.get(dbMap, vo.getId(), ObjectEquipment.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectEquipment> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectEquipment> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectEquipment dbVO = MapUtil.get(dbMap, id, ObjectEquipment.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectEquipment vo = new ObjectEquipment();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 106 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectFloorServiceImpl.java

@@ -0,0 +1,106 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectFloorMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectFloor;
+import com.persagy.dmp.rwd.twin.service.IObjectFloorService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 楼层 接口实现类
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+@Service("objectFloorServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectFloorServiceImpl implements IObjectFloorService {
+
+
+    @Resource
+    private ObjectFloorMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectFloor load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectFloor> queryByCondition(Wrapper<ObjectFloor> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectFloor> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectFloor> insert(List<ObjectFloor> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectFloor> update(List<ObjectFloor> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectFloor> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectFloor> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectFloor dbVO = MapUtil.get(dbMap, vo.getId(), ObjectFloor.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectFloor> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectFloor> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectFloor dbVO = MapUtil.get(dbMap, id, ObjectFloor.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectFloor vo = new ObjectFloor();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 105 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectProjectServiceImpl.java

@@ -0,0 +1,105 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectProjectMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectProject;
+import com.persagy.dmp.rwd.twin.service.IObjectProjectService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 项目数据 实现类
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+@Service("objectProjectServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectProjectServiceImpl implements IObjectProjectService {
+
+    @Resource
+    private ObjectProjectMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectProject load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectProject> queryByCondition(Wrapper<ObjectProject> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectProject> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectProject> insert(List<ObjectProject> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectProject> update(List<ObjectProject> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectProject> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectProject> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectProject dbVO = MapUtil.get(dbMap, vo.getId(), ObjectProject.class);
+            // 容错处理
+            if(dbVO == null) {
+                return;
+            }
+
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if(CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectProject> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectProject> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectProject dbVO = MapUtil.get(dbMap, id, ObjectProject.class);
+            // 容错处理
+            if(dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectProject vo = new ObjectProject();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 105 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectShaftServiceImpl.java

@@ -0,0 +1,105 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectShaftMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectShaft;
+import com.persagy.dmp.rwd.twin.service.IObjectShaftService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 竖井 实现类
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+@Service("objectShaftService")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectShaftServiceImpl implements IObjectShaftService {
+
+    @Resource
+    private ObjectShaftMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectShaft load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectShaft> queryByCondition(Wrapper<ObjectShaft> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectShaft> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectShaft> insert(List<ObjectShaft> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectShaft> update(List<ObjectShaft> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectShaft> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectShaft> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectShaft dbVO = MapUtil.get(dbMap, vo.getId(), ObjectShaft.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectShaft> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectShaft> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectShaft dbVO = MapUtil.get(dbMap, id, ObjectShaft.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectShaft vo = new ObjectShaft();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 104 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectSpaceServiceImpl.java

@@ -0,0 +1,104 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectSpaceMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectSpace;
+import com.persagy.dmp.rwd.twin.service.IObjectSpaceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 空间 接口
+ * @author lvxianyun
+ * @date 2021/8/9
+ */
+@Service("objectSpaceServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectSpaceServiceImpl implements IObjectSpaceService {
+
+    @Resource
+    private ObjectSpaceMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectSpace load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectSpace> queryByCondition(Wrapper<ObjectSpace> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectSpace> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectSpace> insert(List<ObjectSpace> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectSpace> update(List<ObjectSpace> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectSpace> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectSpace> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectSpace dbVO = MapUtil.get(dbMap, vo.getId(), ObjectSpace.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectSpace> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectSpace> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectSpace dbVO = MapUtil.get(dbMap, id, ObjectSpace.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectSpace vo = new ObjectSpace();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 104 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectSystemServiceImpl.java

@@ -0,0 +1,104 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectSystemMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectSystem;
+import com.persagy.dmp.rwd.twin.service.IObjectSystemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 系统 接口实现类
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+@Service("objectSystemServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectSystemServiceImpl implements IObjectSystemService {
+    @Resource
+    private ObjectSystemMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectSystem load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectSystem> queryByCondition(Wrapper<ObjectSystem> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectSystem> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectSystem> insert(List<ObjectSystem> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectSystem> update(List<ObjectSystem> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectSystem> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectSystem> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectSystem dbVO = MapUtil.get(dbMap, vo.getId(), ObjectSystem.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectSystem> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectSystem> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectSystem dbVO = MapUtil.get(dbMap, id, ObjectSystem.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectSystem vo = new ObjectSystem();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 105 - 0
dmp-business/dmp-rwd/src/main/java/com/persagy/dmp/rwd/twin/service/impl/ObjectTenantServiceImpl.java

@@ -0,0 +1,105 @@
+package com.persagy.dmp.rwd.twin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dmp.common.constant.ValidEnum;
+import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
+import com.persagy.dmp.rwd.twin.dao.ObjectTenantMapper;
+import com.persagy.dmp.rwd.twin.entity.ObjectTenant;
+import com.persagy.dmp.rwd.twin.service.IObjectTenantService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 租户 接口实现类
+ * @author lvxianyun
+ * @date 2021/8/13
+ */
+@Service("objectTenantServic")
+@Transactional(rollbackFor = Exception.class)
+public class ObjectTenantServiceImpl implements IObjectTenantService {
+
+
+    @Resource
+    private ObjectTenantMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectTenant load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectTenant> queryByCondition(Wrapper<ObjectTenant> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectTenant> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectTenant> insert(List<ObjectTenant> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        voList.forEach(vo -> {
+            // 生成ID
+            //vo.setId(vo.getId());
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectTenant> update(List<ObjectTenant> voList) {
+        if (CollUtil.isEmpty(voList)) {
+            return null;
+        }
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectTenant> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectTenant> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectTenant dbVO = MapUtil.get(dbMap, vo.getId(), ObjectTenant.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if (CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectTenant> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectTenant> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectTenant dbVO = MapUtil.get(dbMap, id, ObjectTenant.class);
+            // 容错处理
+            if (dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectTenant vo = new ObjectTenant();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 227 - 0
dmp-business/dmp-rwd/src/main/resources/db/init/schema.sql

@@ -150,3 +150,230 @@ CREATE TABLE IF NOT EXISTS `dt_relation` (
   KEY `idx_3` (`graph_code`,`rel_code`,`obj_to`,`project_id`) USING BTREE,
   KEY `idx_4` (`graph_id`,`rel_code`,`obj_to`,`project_id`) USING BTREE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='关系实例表';
+
+
+CREATE TABLE IF NOT EXISTS `dt_object_project` (
+  `id` varchar(64) NOT NULL,
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `password` varchar(60) DEFAULT NULL COMMENT '项目密码',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint DEFAULT 1 COMMENT '合法标识:0-无效,1-有效',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='项目';
+
+
+CREATE TABLE IF NOT EXISTS `dt_object_building` (
+  `id` varchar(64) NOT NULL,
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `project_id` varchar(40) NOT NULL COMMENT '项目ID',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint DEFAULT 1 COMMENT '合法标识:0-无效,1-有效',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='建筑';
+
+
+CREATE TABLE IF NOT EXISTS `dt_object_floor` (
+  `id` varchar(64) NOT NULL,
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `project_id` varchar(64) NOT NULL COMMENT '项目ID',
+  `building_id` varchar(64) DEFAULT NULL COMMENT '建筑ID',
+  `sequence_id` int DEFAULT NULL COMMENT '楼层顺序号',
+  `sign` int DEFAULT NULL COMMENT '楼层平面图分割标记',
+  `model_id` varchar(64) DEFAULT NULL COMMENT '模型文件ID',
+  `outline` json DEFAULT NULL COMMENT '楼层选定区域轮廓线',
+  `qr_code` varchar(300) DEFAULT NULL COMMENT '二维码图片',
+  `floor_elevation` int DEFAULT NULL COMMENT '楼板标高',
+  `bim_id_pre` varchar(200) DEFAULT NULL COMMENT 'BIMID前缀',
+  `properties` json DEFAULT NULL COMMENT '自定义信息点',
+  `bim_location` varchar(200) DEFAULT NULL COMMENT '坐标',
+  `floor_elevation` int(11) DEFAULT NULL COMMENT '人数',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint DEFAULT 1 COMMENT '合法标识:0-无效,1-有效',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='楼层';
+
+
+CREATE TABLE IF NOT EXISTS `dt_object_space` (
+  `id` varchar(64) NOT NULL,
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `project_id` varchar(64) NOT NULL COMMENT '项目ID',
+  `building_id` varchar(64) DEFAULT NULL COMMENT '建筑ID',
+  `floor_id` varchar(64) DEFAULT NULL COMMENT '楼层ID',
+  `outline` json DEFAULT NULL COMMENT '楼层选定区域轮廓线',
+  `outline2` json DEFAULT NULL COMMENT '轮廓线2',
+  `pic` json DEFAULT NULL COMMENT '图片',
+  `proj_room_func_type` varchar(200) DEFAULT NULL COMMENT '项目空间功能区类型',
+  `room_serial` float DEFAULT NULL COMMENT '空间序号',
+  `default_qr_code` varchar(200) DEFAULT NULL COMMENT '平台二维码',
+  `bim_location` varchar(200) DEFAULT NULL COMMENT '模型中坐标',
+  `depth` float DEFAULT NULL COMMENT '进深',
+  `width` float DEFAULT NULL COMMENT '面宽',
+  `build_area` float DEFAULT NULL COMMENT '建筑面积',
+  `net_area` float DEFAULT NULL COMMENT '使用面积',
+  `height` float DEFAULT NULL COMMENT '高',
+  `intro` text DEFAULT NULL COMMENT '备注文字',
+  `elec_cap` float DEFAULT NULL COMMENT '配电容量',
+  `pollution_degree` varchar(200) DEFAULT NULL COMMENT '污染等级',
+  `func_type` varchar(200) DEFAULT NULL COMMENT '空间功能区类型',
+  `tenant_info` json DEFAULT NULL COMMENT '租户信息',
+  `dynamic_infor` json DEFAULT NULL COMMENT '动态信息',
+  `zone_orientation` varchar(200) DEFAULT NULL COMMENT '空间朝向',
+  `rated_coolingp` float DEFAULT NULL COMMENT '设计供冷功率',
+  `rated_heatingp` float DEFAULT NULL COMMENT '设计供热功率',
+  `ac_type` varchar(200) DEFAULT NULL COMMENT '空调形式',
+  `rated_lightp` float DEFAULT NULL COMMENT '设计照明功率',
+  `zone_type` varchar(200) DEFAULT NULL COMMENT '内外区分类',
+  `state` tinyint DEFAULT 1 COMMENT '空间是否受影响:0不受影响,1受影响',
+  `tenant_type` varchar(200) DEFAULT NULL COMMENT '租赁业态类型',
+  `tenant` varchar(200) DEFAULT NULL COMMENT '所属租户',
+  `qr_code_pic` varchar(200) DEFAULT NULL COMMENT '空间二维码',
+  `permanent_people_num` int DEFAULT NULL COMMENT '空间常驻人数',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint DEFAULT 1 COMMENT '合法标识:0-无效,1-有效',
+  `creator` varchar(32) DEFAULT NULL COMMENT '创建人',
+  `creation_time` char(14) NULL DEFAULT NULL COMMENT '创建时间',
+  `modifier` varchar(32) DEFAULT NULL COMMENT '最后修改人',
+  `modified_time` char(14) NULL DEFAULT NULL COMMENT '最后修改时间',
+  `ts` timestamp default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='空间';
+
+
+CREATE TABLE IF NOT EXISTS `dt_object_equipment` (
+  `id` varchar(64) NOT NULL,
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) DEFAULT NULL COMMENT '集团编码',
+  `project_id` varchar(64) DEFAULT NULL COMMENT '项目ID',
+  `building_id` varchar(64) DEFAULT NULL COMMENT '建筑ID',
+  `bim_location` varchar(200) DEFAULT NULL COMMENT '坐标',
+  `qr_code` varchar(300) DEFAULT NULL COMMENT '二维码图片',
+  `cad_id`varchar(200) DEFAULT NULL COMMENT '设计图纸中编码',
+  `parent_id` varchar(64) DEFAULT NULL COMMENT '部件关联设备的id',
+  `property_id` varchar(64) DEFAULT NULL COMMENT '资产id',
+  `location` json DEFAULT NULL COMMENT '坐标x,y,z',
+  `category_name` varchar(200) DEFAULT NULL COMMENT '分类名',
+  `custom_category` varchar(200) DEFAULT NULL COMMENT '项目自定义类型',
+  `task_state` tinyint DEFAULT NULL COMMENT '任务状态',
+  `model_id` varchar(200) DEFAULT NULL COMMENT '模型id',
+  `code_type` int DEFAULT NULL COMMENT '贴码状态',
+  `equip_serial` int DEFAULT NULL COMMENT '设备序号',
+  `family_name` varchar(200) DEFAULT NULL COMMENT 'Revit族',
+  `family_symbol` varchar(200) DEFAULT NULL COMMENT 'Revit族类型',
+  `note` text DEFAULT NULL COMMENT '备注',
+  `bim_type_id` varchar(200) DEFAULT NULL COMMENT 'BIM构建编码',
+  `class_code`varchar(200) DEFAULT NULL COMMENT '分类',
+  `app_id`varchar(200) DEFAULT NULL COMMENT '客户端id',
+  `find_people` varchar(200) DEFAULT NULL COMMENT '添加人员',
+  `rf_id` varchar(200) DEFAULT NULL COMMENT 'RFID标识',
+  `default_qr_code` varchar(200) DEFAULT NULL COMMENT '平台二维码',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint NOT NULL COMMENT '有效标识',
+  `creation_time` char(14) DEFAULT NULL COMMENT '创建时间',
+  `creator` varchar(40) DEFAULT NULL COMMENT '创建用户',
+  `modified_time` char(14) DEFAULT NULL COMMENT '最后修改时间',
+  `modifier` varchar(40) DEFAULT NULL COMMENT '最后修改人',
+  `ts` timestamp DEFAULT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='设备';
+
+
+CREATE TABLE IF NOT EXISTS 'dt_object_system' (
+  `id` varchar(64) NOT NULL COMMENT '主键',
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `cad_id` varchar(60) DEFAULT NULL COMMENT 'CADID',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `project_id` varchar(64) NOT NULL COMMENT '项目ID',
+  `building_id` varchar(64) DEFAULT NULL COMMENT '建筑ID',
+  `floor_id` varchar(64) DEFAULT NULL COMMENT '楼层id',
+  `category_name` varchar(200) DEFAULT NULL COMMENT '分类名',
+  `class_code` varchar(200) DEFAULT NULL COMMENT '分类',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint NOT NULL COMMENT '有效标识',
+  `creation_time` char(14) DEFAULT NULL COMMENT '创建时间',
+  `creator` varchar(40) DEFAULT NULL COMMENT '创建用户',
+  `modified_time` char(14) DEFAULT NULL COMMENT '最后修改时间',
+  `modifier` varchar(40) DEFAULT NULL COMMENT '最后修改人',
+  `ts` timestamp DEFAULT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='系统';
+
+
+CREATE TABLE IF NOT EXISTS 'dt_object_shaft' (
+  `id` varchar(64) NOT NULL COMMENT '主键',
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `bim_location` varchar(200) DEFAULT NULL COMMENT '',
+  `bim_id` varchar(60) DEFAULT NULL COMMENT 'BIM模型中编码',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `project_id` varchar(64) NOT NULL COMMENT '项目ID',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint NOT NULL COMMENT '有效标识',
+  `creation_time` char(14) DEFAULT NULL COMMENT '创建时间',
+  `creator` varchar(40) DEFAULT NULL COMMENT '创建用户',
+  `modified_time` char(14) DEFAULT NULL COMMENT '最后修改时间',
+  `modifier` varchar(40) DEFAULT NULL COMMENT '最后修改人',
+  `ts` timestamp DEFAULT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='竖井';
+
+
+CREATE TABLE IF NOT EXISTS 'dt_object_tenant' (
+  `id` varchar(64) NOT NULL COMMENT '主键',
+  `name` varchar(200) DEFAULT NULL COMMENT '名称',
+  `local_id` varchar(60) DEFAULT NULL COMMENT '本地编码',
+  `local_name` varchar(200) DEFAULT NULL COMMENT '本地名称',
+  `local_id2` varchar(60) DEFAULT NULL COMMENT '本地编码2',
+  `local_name2` varchar(200) DEFAULT NULL COMMENT '本地名称2',
+  `group_code` varchar(40) NOT NULL COMMENT '集团编码',
+  `project_id` varchar(64) NOT NULL COMMENT '项目ID',
+  `lease_info` json DEFAULT NULL COMMENT '租赁信息',
+  `consumption_info` json DEFAULT NULL COMMENT '能耗信息',
+  `dynamic_infor` json DEFAULT NULL COMMENT '动态信息',
+  `custom_param` json DEFAULT NULL COMMENT '自定义信息点',
+  `infos` json DEFAULT NULL COMMENT '信息点',
+  `valid` tinyint NOT NULL COMMENT '有效标识',
+  `creation_time` char(14) DEFAULT NULL COMMENT '创建时间',
+  `creator` varchar(40) DEFAULT NULL COMMENT '创建用户',
+  `modified_time` char(14) DEFAULT NULL COMMENT '最后修改时间',
+  `modifier` varchar(40) DEFAULT NULL COMMENT '最后修改人',
+  `ts` timestamp DEFAULT NULL COMMENT '乐观锁',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='租户';

+ 0 - 1
dmp-common/src/main/java/com/persagy/dmp/common/model/entity/BaseEntity.java

@@ -1,7 +1,6 @@
 package com.persagy.dmp.common.model.entity;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.persagy.dmp.common.lang.PsDateTime;
 import lombok.*;
 
 import java.io.Serializable;

+ 4 - 4
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/model/DigitalManageMessage.java

@@ -1,6 +1,6 @@
 package com.persagy.dmp.basic.model;
 
-import com.persagy.dmp.common.model.entity.BaseEntity;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import lombok.Data;
 
 /**
@@ -16,15 +16,15 @@ public class DigitalManageMessage {
     /** 操作实体 */
     private String operatorObj;
     /** 原数据 */
-    private BaseEntity oldObj;
+    private ObjectNode oldObj;
     /** 现数据 */
-    private BaseEntity newObj;
+    private ObjectNode newObj;
 
     public DigitalManageMessage(){
         super();
     }
 
-    public DigitalManageMessage(String operatorType, String operatorObj, BaseEntity oldObj, BaseEntity newObj) {
+    public DigitalManageMessage(String operatorType, String operatorObj, ObjectNode oldObj, ObjectNode newObj) {
         this.operatorType = operatorType;
         this.operatorObj = operatorObj;
         this.oldObj = oldObj;