Sfoglia il codice sorgente

项目消息监听

yucheng 3 anni fa
parent
commit
4c1fbe0b09

+ 2 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/basic/utils/JsonNodeUtils.java

@@ -21,7 +21,7 @@ public class JsonNodeUtils {
      */
     public static Object getNodeValue(JsonNode node) {
         if(node.isContainerNode() || node.isNull()) {
-            return "0";
+            return null;
         }
         if(node.isBigDecimal()) {
             return node.decimalValue();
@@ -60,7 +60,7 @@ public class JsonNodeUtils {
         if(node.isTextual()) {
             return node.textValue();
         }
-        return "0";
+        return null;
     }
 
     /**

+ 41 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/config/ProjectMessageConfig.java

@@ -0,0 +1,41 @@
+package com.persagy.dc.digital.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Binding;
+import org.springframework.amqp.core.BindingBuilder;
+import org.springframework.amqp.core.Queue;
+import org.springframework.amqp.core.TopicExchange;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 项目变更消息配置
+ * @author Charlie Yu
+ * @date 2021-06-25
+ */
+@Slf4j
+@Configuration
+public class ProjectMessageConfig {
+
+    /** 项目消息 - Exchange */
+    public static final String PROJECT_EXCHANGE = "saas.common.topic";
+    /** 项目消息 - Queue */
+    public static final String PROJECT_QUEUE = "bdtp.project.saas.queue";
+    /** 项目消息 - RoutingKey */
+    public static final String PROJECT_ROUTING_KEY = "saas.common.bdtp.project";
+
+    @Bean
+    public TopicExchange projectExchange() {
+        return new TopicExchange(PROJECT_EXCHANGE);
+    }
+
+    @Bean
+    public Queue projectQueue(){
+        return new Queue(PROJECT_QUEUE);
+    }
+
+    @Bean
+    public Binding projectBinding() {
+        return BindingBuilder.bind(projectQueue()).to(projectExchange()).with(PROJECT_ROUTING_KEY);
+    }
+}

+ 1 - 1
dc-business/dc-digital/src/main/java/com/persagy/dc/data/entity/ObjectDigital.java

@@ -1,4 +1,4 @@
-package com.persagy.dc.data.entity;
+package com.persagy.dc.digital.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.databind.node.ObjectNode;

+ 1 - 1
dc-business/dc-digital/src/main/java/com/persagy/dc/data/entity/ObjectRelation.java

@@ -1,4 +1,4 @@
-package com.persagy.dc.data.entity;
+package com.persagy.dc.digital.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.persagy.dc.common.model.entity.AuditableEntity;

+ 44 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/handler/ProjectMessageHandler.java

@@ -0,0 +1,44 @@
+package com.persagy.dc.digital.handler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.persagy.dc.amqp.handler.AbstractRabbitHandlerTemplate;
+import com.persagy.dc.common.exception.BusinessException;
+import com.persagy.dc.digital.config.ProjectMessageConfig;
+import com.persagy.dc.digital.entity.ObjectDigital;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.IOException;
+
+/**
+ * 项目消息消费
+ * @author Charlie Yu
+ * @date 2021-06-25
+ */
+@Slf4j
+@RabbitListener(queues = ProjectMessageConfig.PROJECT_QUEUE)
+public class ProjectMessageHandler extends AbstractRabbitHandlerTemplate {
+
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    /**
+     * 消费
+     * @param message 消息体字符串
+     * @param channel 通道对象
+     * @param vo     消息对象
+     */
+    @Override
+    protected void handler(String message, Channel channel, Message vo) {
+        try {
+            ProjectMessageVO msgVO = objectMapper.readValue(message, ProjectMessageVO.class);
+            ObjectDigital project = msgVO.toObjectDigital();
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+            throw new BusinessException(e.getMessage(), e);
+        }
+    }
+}

+ 141 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/handler/ProjectMessageVO.java

@@ -0,0 +1,141 @@
+package com.persagy.dc.digital.handler;
+
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dc.common.lang.PsDateTime;
+import com.persagy.dc.digital.entity.ObjectDigital;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.Set;
+
+/**
+ * 项目消息对象
+ * {
+ *   "id":"PR1395270128588939265", //项目主键Id
+ *   "groupCode":"ICBC",           //集团编码
+ *   "projectId":"Pj8765863329",   //项目ID
+ *   "projectLocalId":"8765863329",//项目本地编码
+ *   "areaId":"AR1381523632282435585",//区域ID
+ *   "projectName":"项目名称",       //项目名称
+ *   "provinceCode":"",             //项目所在省份
+ *   "cityCode":"",                 //项目所在市
+ *   "zoneCode":"",                 //项目所在区
+ *   "location":"天府大道219号",      //项目详细地址
+ *   "openTime":1623985811012,       //开业时间
+ *   "createTime":1623985811012,     //创建时间
+ *   "updateTime":1623985811012,     //更新时间
+ *   "updateUser":"AC1372371635352403969",//最后修改人ID
+ *   "remark":"备注",                 //备注
+ *   "valid":1,                      //有效状态,0-无效,1-有效
+ *   "projectFun":"E100",            //项目功能
+ *   "projectWeather":"20",          //项目天气
+ *   "projectImage":["图4.jpg","图6.jpg"],//项目图片,set集合
+ *   "longitude":11.002,             //项目经度
+ *   "latitude":22.99,               //项目纬度
+ *   "manageZone":"高新区",            //集团管理分区
+ *   "type":"create"                //通知类型,create-创建,update-修改
+ * }
+ * @author Charlie Yu
+ * @date 2021-06-25
+ */
+@Data
+public class ProjectMessageVO {
+
+    /** 项目主键Id */
+    private String id;
+    /** 集团编码 */
+    private String groupCode;
+    /** 项目ID */
+    private String projectId;
+    /** 项目本地编码 */
+    private String projectLocalId;
+    /** 区域ID */
+    private String areaId;
+    /** 项目名称 */
+    private String projectName;
+    /** 项目所在省份 */
+    private String provinceCode;
+    /** 项目所在市 */
+    private String cityCode;
+    /** 项目所在区 */
+    private String zoneCode;
+    /** 项目详细地址 */
+    private String location;
+    /** 开业时间 */
+    private PsDateTime openTime;
+    /** 创建时间 */
+    private PsDateTime createTime;
+    /** 更新时间 */
+    private PsDateTime updateTime;
+    /** 最后修改人ID */
+    private String updateUser;
+    /** 备注 */
+    private String remark;
+    /** 有效状态,0-无效,1-有效 */
+    private Integer valid;
+    /** 项目功能 */
+    private String projectFun;
+    /** 项目天气 */
+    private String projectWeather;
+    /** 项目图片,set集合 */
+    private Set<String> projectImage;
+    /** 项目经度 */
+    private BigDecimal longitude;
+    /** 项目纬度 */
+    private BigDecimal latitude;
+    /** 集团管理分区 */
+    private String manageZone;
+    /** 通知类型,create-创建,update-修改 */
+    private String type;
+
+    /**
+     * 转换为对象
+     * @return
+     */
+    public ObjectDigital toObjectDigital() {
+        ObjectDigital project = new ObjectDigital();
+        project.setId(projectId);
+        project.setProjectId(projectId);
+        project.setName(projectName);
+        project.setLocalId(projectLocalId);
+        project.setObjType("project");
+        project.setClassCode("project");
+        project.setGrouping(1);
+        project.setVirtualInfoCodes(Collections.emptyList());
+        project.setValid(valid);
+        if("create".equalsIgnoreCase(type)) {
+            project.setCreateApp("bmp");
+        } else {
+            project.setUpdateApp("bmp");
+        }
+        project.setInfos(toObjectInfos());
+        return project;
+    }
+
+    /**
+     * 构建infos
+     * @return
+     */
+    public ObjectNode toObjectInfos() {
+        // 构建infos
+        ObjectNode infos = JsonNodeFactory.instance.objectNode();
+        infos.put("province", provinceCode);
+        infos.put("city", cityCode);
+        infos.put("urbanZone", zoneCode);
+        infos.put("longitude", longitude);
+        infos.put("latitude", latitude);
+        infos.put("address", location);
+        infos.put("businessOpeningTime", openTime.toString("yyyyMMdd"));
+        infos.put("projFuncType", projectFun);
+        infos.put("climateZone", projectWeather);
+        infos.put("groupManageZone", manageZone);
+        // 添加图片
+        if(CollUtil.isNotEmpty(projectImage)) {
+            projectImage.forEach(p -> infos.withArray("projPic").addPOJO(p));
+        }
+        return infos;
+    }
+}