Commit a5e982eff7a7792b9aa1a922c74a96b741de78c9

Authored by zhangmeiyang
1 parent b287db95

金蝶push

ereport-start/build.gradle
... ... @@ -9,6 +9,7 @@ bootJar {
9 9  
10 10 dependencies {
11 11 implementation project(':ereport-core')
  12 + implementation project(':etrade-thirdparty')
12 13 implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2022.0.0.0-RC2'
13 14 implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2022.0.0.0-RC2'
14 15 }
... ...
ereport-start/src/main/java/com/diligrp/etrade/boss/EtradeBossBootstrap.java
... ... @@ -4,6 +4,7 @@ import com.diligrp.etrade.core.CoreConfiguration;
4 4 import com.diligrp.etrade.report.ReportConfiguration;
5 5 import com.diligrp.etrade.rpc.RpcConfiguration;
6 6 import com.diligrp.etrade.shared.SharedConfiguration;
  7 +import com.diligrp.etrade.thirdparty.ThirdPartyConfiguration;
7 8 import org.springframework.boot.SpringApplication;
8 9 import org.springframework.boot.SpringBootConfiguration;
9 10 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
... ... @@ -13,7 +14,7 @@ import org.springframework.context.annotation.Import;
13 14  
14 15 @SpringBootConfiguration
15 16 @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class })
16   -@Import({BossConfiguration.class, SharedConfiguration.class, RpcConfiguration.class, CoreConfiguration.class, ReportConfiguration.class})
  17 +@Import({BossConfiguration.class, SharedConfiguration.class, RpcConfiguration.class, CoreConfiguration.class, ReportConfiguration.class, ThirdPartyConfiguration.class})
17 18 @EnableDiscoveryClient
18 19 public class EtradeBossBootstrap {
19 20 public static void main(String[] args) {
... ...
etrade-core/src/main/java/com/diligrp/etrade/core/service/ApplicationContextHolder.java 0 → 100644
  1 +package com.diligrp.etrade.core.service;
  2 +
  3 +import org.springframework.context.ApplicationContext;
  4 +
  5 +/**
  6 + * ApplicationContext 持有者
  7 + */
  8 +public enum ApplicationContextHolder {
  9 +
  10 + INSTANCE;
  11 +
  12 + private ApplicationContext applicationContext;
  13 +
  14 + /**
  15 + * 赋值
  16 + *
  17 + * @param applicationContext
  18 + */
  19 + public void setApplicationContext(ApplicationContext applicationContext) {
  20 + this.applicationContext = applicationContext;
  21 + }
  22 +
  23 + /**
  24 + * 获取bean
  25 + *
  26 + * @param cls
  27 + * @return
  28 + */
  29 + public <T> T getBean(Class<T> cls) {
  30 + return this.applicationContext.getBean(cls);
  31 + }
  32 +}
... ...
etrade-thirdparty/build.gradle 0 → 100644
  1 +group = 'com.diligrp'
  2 +archivesBaseName = 'etrade-thirdparty'
  3 +
  4 +dependencies {
  5 + api project(':etrade-shared')
  6 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/ThirdPartyConfiguration.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty;
  2 +
  3 +import org.springframework.context.annotation.ComponentScan;
  4 +import org.springframework.context.annotation.Configuration;
  5 +
  6 +/**
  7 + * @Author: zhangmeiyang
  8 + * @CreateTime: 2024-09-10 11:09
  9 + * @Version: todo
  10 + */
  11 +@Configuration
  12 +@ComponentScan("com.diligrp.etrade.thirdparty")
  13 +public class ThirdPartyConfiguration {
  14 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/co/BaseCo.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.co;
  2 +
  3 +import com.diligrp.etrade.thirdparty.type.BusinessEnum;
  4 +
  5 +/**
  6 + * @Author: zhangmeiyang
  7 + * @CreateTime: 2024-09-10 11:30
  8 + * @Version: todo
  9 + */
  10 +public class BaseCo {
  11 + private String errorMessage;
  12 + private Integer retryCount;
  13 + private BusinessEnum businessEnum;
  14 +
  15 + public BaseCo() {
  16 + this.retryCount = 0;
  17 + }
  18 +
  19 + public BusinessEnum getBusinessEnum() {
  20 + return businessEnum;
  21 + }
  22 +
  23 + public void setBusinessEnum(BusinessEnum businessEnum) {
  24 + this.businessEnum = businessEnum;
  25 + }
  26 +
  27 + public Integer getRetryCount() {
  28 + return retryCount;
  29 + }
  30 +
  31 + public void setRetryCount(Integer retryCount) {
  32 + this.retryCount = retryCount;
  33 + }
  34 +
  35 + public String getErrorMessage() {
  36 + return errorMessage;
  37 + }
  38 +
  39 + public void setErrorMessage(String errorMessage) {
  40 + this.errorMessage = errorMessage;
  41 + }
  42 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/co/ErrorMessageCo.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.co;
  2 +
  3 +/**
  4 + * @Author: zhangmeiyang
  5 + * @CreateTime: 2024-09-10 11:32
  6 + * @Version: todo
  7 + */
  8 +public class ErrorMessageCo extends BaseCo{
  9 +
  10 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/co/TestCo.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.co;
  2 +
  3 +/**
  4 + * @Author: zhangmeiyang
  5 + * @CreateTime: 2024-09-10 15:06
  6 + * @Version: todo
  7 + */
  8 +public class TestCo extends BaseCo{
  9 + private String name;
  10 +
  11 + public String getName() {
  12 + return name;
  13 + }
  14 +
  15 + public void setName(String name) {
  16 + this.name = name;
  17 + }
  18 +}
... ...
etrade-rpc/src/main/java/com/diligrp/etrade/rpc/executor/ZrAutoPush.java renamed to etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/exec/ZrAutoPush.java
1   -package com.diligrp.etrade.rpc.executor;
  1 +package com.diligrp.etrade.thirdparty.exec;
2 2  
3   -import jakarta.annotation.Resource;
4 3 import org.springframework.amqp.core.*;
5   -import org.springframework.amqp.rabbit.annotation.QueueBinding;
6   -import org.springframework.amqp.rabbit.annotation.RabbitListener;
7   -import org.springframework.amqp.rabbit.core.RabbitTemplate;
8 4 import org.springframework.beans.factory.annotation.Qualifier;
9 5 import org.springframework.context.annotation.Bean;
10 6 import org.springframework.context.annotation.Configuration;
11   -import org.springframework.stereotype.Component;
12 7  
13   -import java.nio.charset.StandardCharsets;
14 8 import java.util.HashMap;
15 9 import java.util.Map;
16 10  
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/exec/ZrHolder.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.exec;
  2 +
  3 +import com.diligrp.etrade.thirdparty.handler.AbstractBusinessHandler;
  4 +import com.diligrp.etrade.thirdparty.type.BusinessEnum;
  5 +import jakarta.annotation.Resource;
  6 +import org.springframework.beans.factory.DisposableBean;
  7 +import org.springframework.beans.factory.InitializingBean;
  8 +import org.springframework.stereotype.Component;
  9 +
  10 +import java.util.List;
  11 +import java.util.Map;
  12 +import java.util.concurrent.ConcurrentHashMap;
  13 +
  14 +/**
  15 + * @Author: zhangmeiyang
  16 + * @CreateTime: 2024-09-10 10:49
  17 + * @Version: todo
  18 + */
  19 +@Component
  20 +public class ZrHolder implements InitializingBean, DisposableBean {
  21 +
  22 + public final static Map<BusinessEnum, AbstractBusinessHandler> CONTEXT = new ConcurrentHashMap<>();
  23 +
  24 + @Resource
  25 + private List<AbstractBusinessHandler> abstractBusinessHandlerList;
  26 +
  27 + @Override
  28 + public void afterPropertiesSet() throws Exception {
  29 + abstractBusinessHandlerList.forEach(e->{
  30 + CONTEXT.put(e.getType(), e);
  31 + });
  32 + }
  33 +
  34 + @Override
  35 + public void destroy() throws Exception {
  36 +
  37 + }
  38 +}
... ...
etrade-rpc/src/main/java/com/diligrp/etrade/rpc/executor/ZrReceiver.java renamed to etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/exec/ZrReceiver.java
1   -package com.diligrp.etrade.rpc.executor;
  1 +package com.diligrp.etrade.thirdparty.exec;
2 2  
3 3 import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.co.BaseCo;
  5 +import com.diligrp.etrade.thirdparty.type.BusinessEnum;
4 6 import com.rabbitmq.client.Channel;
5 7 import jakarta.annotation.Resource;
  8 +import org.slf4j.Logger;
  9 +import org.slf4j.LoggerFactory;
6 10 import org.springframework.amqp.core.Message;
7 11 import org.springframework.amqp.core.MessageBuilder;
8 12 import org.springframework.amqp.rabbit.annotation.Exchange;
... ... @@ -14,9 +18,8 @@ import org.springframework.stereotype.Component;
14 18  
15 19 import java.io.IOException;
16 20 import java.nio.charset.StandardCharsets;
17   -import java.util.Map;
18 21  
19   -import static com.diligrp.etrade.rpc.executor.ZrAutoPush.*;
  22 +import static com.diligrp.etrade.thirdparty.exec.ZrAutoPush.*;
20 23  
21 24 /**
22 25 * @Author: zhangmeiyang
... ... @@ -25,47 +28,49 @@ import static com.diligrp.etrade.rpc.executor.ZrAutoPush.*;
25 28 */
26 29 @Component
27 30 public class ZrReceiver {
28   -
  31 + private final static Logger LOG = LoggerFactory.getLogger(ZrReceiver.class);
  32 + private static final Long DELAY = 5000L;
  33 + private static final String DELAY_PREFIX = "x-delay";
29 34 @Resource
30 35 private RabbitTemplate rabbitTemplate;
31 36  
32 37 @RabbitListener(bindings = @QueueBinding(value = @Queue(value = ZR_NORMAL_QUEUE, autoDelete = "false"), exchange = @Exchange(value = ZR_NORMAL_EXCHANGE), key = ZR_NORMAL_ROUTING), ackMode = "MANUAL")
33 38 public void receiveMessage(Channel channel, Message message) throws IOException {
  39 + var content = new String(message.getBody(), StandardCharsets.UTF_8);
  40 + BaseCo baseCo = JsonUtils.fromJsonString(content, BaseCo.class);
34 41 try {
35   - var temp = 1/0;
  42 + ZrHolder.CONTEXT.get(baseCo.getBusinessEnum()).handle(content);
36 43 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
37   - }catch (Exception e){
38   - StackTraceElement[] stackTrace = e.getStackTrace();
39   - String jsonString = JsonUtils.toJsonString(stackTrace);
40   - System.out.println(jsonString);
41   - sendDelayMsg(3000L,message.getBody());
  44 + } catch (Exception e) {
42 45 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
  46 + var t = baseCo.getBusinessEnum().getBusinessParam(content);
  47 + t.setRetryCount(baseCo.getRetryCount() + 1);
  48 + sendDelayMsg(DELAY, JsonUtils.toJsonString(t));
43 49 }
44 50 }
45 51  
46   - @RabbitListener(queues = ZR_DEAD_QUEUE)
  52 + @RabbitListener(queues = ZR_DEAD_QUEUE, ackMode = "MANUAL")
47 53 public void handleCustomDelayMsg(Channel channel, Message message) throws IOException {
48   - Map<String, Object> headersMap = message.getMessageProperties().getHeaders();
49   - int retryCount = (int) headersMap.get("x-retry-count");
  54 + var content = new String(message.getBody(), StandardCharsets.UTF_8);
  55 + BaseCo baseCo = JsonUtils.fromJsonString(content, BaseCo.class);
50 56 try {
51   - if (retryCount > 3){
52   - //db
53   - }else {
54   -
55   - }
  57 + ZrHolder.CONTEXT.get(baseCo.getBusinessEnum()).handle(content);
56 58 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
57   - }catch (Exception e){
58   - retryCount++;
59   - headersMap.put("x-retry-count", retryCount);
60   - channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
  59 + } catch (Exception e) {
  60 + channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
  61 + var t = baseCo.getBusinessEnum().getBusinessParam(content);
  62 + t.setRetryCount(baseCo.getRetryCount() + 1);
  63 + if (t.getRetryCount() > 3) {
  64 + t.setErrorMessage(e.fillInStackTrace().getMessage());
  65 + t.setBusinessEnum(BusinessEnum.ERROR);
  66 + }
  67 + sendDelayMsg(DELAY, JsonUtils.toJsonString(t));
61 68 }
62 69 }
63 70  
64   - public void sendDelayMsg(Long currentMills,byte[] bytes) {
65   - Message msg = MessageBuilder.withBody(bytes)
66   - .setHeader("x-delay", currentMills)
67   - .setHeader("x-retry-count", 0)
68   - .build();
  71 + public void sendDelayMsg(Long currentMills, String message) {
  72 + byte[] bytes = message.getBytes(StandardCharsets.UTF_8);
  73 + Message msg = MessageBuilder.withBody(bytes).setHeader(DELAY_PREFIX, currentMills).build();
69 74 rabbitTemplate.convertAndSend(ZR_DEAD_EXCHANGE, ZR_DEAD_QUEUE, msg);
70 75 }
71 76 }
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/AbstractBusinessHandler.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.handler;
  2 +
  3 +import com.diligrp.etrade.thirdparty.type.BusinessEnum;
  4 +
  5 +public abstract class AbstractBusinessHandler {
  6 +
  7 + public abstract void handle(String json);
  8 +
  9 + public abstract BusinessEnum getType();
  10 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/ErrorBusinessHandler.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.handler;
  2 +
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.co.ErrorMessageCo;
  5 +import com.diligrp.etrade.thirdparty.type.BusinessEnum;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +/**
  9 + * @Author: zhangmeiyang
  10 + * @CreateTime: 2024-09-10 10:56
  11 + * @Version: todo
  12 + */
  13 +@Component
  14 +public class ErrorBusinessHandler extends AbstractBusinessHandler {
  15 + @Override
  16 + public void handle(String json) {
  17 + ErrorMessageCo co = JsonUtils.fromJsonString(json, ErrorMessageCo.class);
  18 + System.out.println(co.getErrorMessage());
  19 + }
  20 +
  21 + @Override
  22 + public BusinessEnum getType() {
  23 + return BusinessEnum.ERROR;
  24 + }
  25 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/handler/TestBusinessHandler.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.handler;
  2 +
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.co.TestCo;
  5 +import com.diligrp.etrade.thirdparty.type.BusinessEnum;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +/**
  9 + * @Author: zhangmeiyang
  10 + * @CreateTime: 2024-09-10 15:03
  11 + * @Version: todo
  12 + */
  13 +@Component
  14 +public class TestBusinessHandler extends AbstractBusinessHandler{
  15 + @Override
  16 + public void handle(String json) {
  17 + TestCo testCo = JsonUtils.fromJsonString(json, TestCo.class);
  18 + var s = 1/0;
  19 + }
  20 +
  21 + @Override
  22 + public BusinessEnum getType() {
  23 + return BusinessEnum.TEST;
  24 + }
  25 +}
... ...
etrade-thirdparty/src/main/java/com/diligrp/etrade/thirdparty/type/BusinessEnum.java 0 → 100644
  1 +package com.diligrp.etrade.thirdparty.type;
  2 +
  3 +import com.diligrp.etrade.core.util.JsonUtils;
  4 +import com.diligrp.etrade.thirdparty.co.BaseCo;
  5 +import com.diligrp.etrade.thirdparty.co.ErrorMessageCo;
  6 +import com.diligrp.etrade.thirdparty.co.TestCo;
  7 +
  8 +/**
  9 + * @Author: zhangmeiyang
  10 + * @CreateTime: 2024-09-10 10:53
  11 + * @Version: todo
  12 + */
  13 +public enum BusinessEnum implements BusinessKlass{
  14 +
  15 + ERROR("ERROR"){
  16 + @Override
  17 + public ErrorMessageCo getBusinessParam(String content) {
  18 + return JsonUtils.fromJsonString(content,ErrorMessageCo.class);
  19 + }
  20 + },
  21 +
  22 + TEST("TEST"){
  23 + @Override
  24 + public TestCo getBusinessParam(String content) {
  25 + return JsonUtils.fromJsonString(content,TestCo.class);
  26 + }
  27 + };
  28 +
  29 + public final String code;
  30 +
  31 + BusinessEnum(String code) {
  32 + this.code = code;
  33 + }
  34 +}
  35 +
  36 +interface BusinessKlass<T extends BaseCo> {
  37 + T getBusinessParam(String content);
  38 +
  39 +}
... ...
settings.gradle
1 1 rootProject.name = 'dili-ereport'
2 2 include 'etrade-core'
  3 +include 'etrade-thirdparty'
3 4 include 'etrade-rpc'
4 5 include 'etrade-shared'
5 6 include 'ereport-start'
6 7 include 'ereport-core'
7 8  
8   -
... ...