阿里聚石塔-内部服务器搭建

阿里聚石塔-内部服务器搭建

阿里聚石塔,需要在阿里内部搭建服务器,并且只能使用对应的端口,并且只能暴露一个request请求

使用策略模式和工场模式去创建对应的实现接口

img

1. 对外暴露的Contoller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@RestController
public class TaoBaoMethodWebController {


@RequestMapping("/polyStoneTower")
public String tower(HttpServletRequest request) {
// 校验type参数 Start
String type = request.getParameter("type");
if (type == null) {
return JSON.toJSONString(Result.failure("传入的type参数不能为空"));
}
TaoBaoMethodEnums[] values = TaoBaoMethodEnums.values();
List<String> enumCodeList = Arrays.stream(values).map(TaoBaoMethodEnums::getCode).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(enumCodeList) && !enumCodeList.contains(type)) {
return JSON.toJSONString(Result.failure("传入的type参数不能不存在"));
}
// 校验type参数 End
String authStr = request.getParameter("authParams");
if (StringUtils.isEmpty(authStr)) {
return JSON.toJSONString(Result.failure("请传入authParams参数"));
}
TaoBaoMethodContext methodContext = new TaoBaoMethodContext();
return methodContext.selectMethod(type, request);
}
}

对应的枚举类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public enum TaoBaoMethodEnums {
TAO_BAO_METHOD_INSURANCE_GET_ORDER_LIST("TAO_BAO_METHOD_INSURANCE_GET_ORDER_LIST","淘宝获取延保订单列表"),
TAO_BAO_METHOD_INSURANCE_PUSH_ORDER_DATA("TAO_BAO_METHOD_INSURANCE_PUSH_ORDER_DATA","淘宝推送电子保单数据"),
TAO_BAO_METHOD_INSURANCE_UPLOAD_ORDER_PDF("TAO_BAO_METHOD_INSURANCE_UPLOAD_ORDER_PDF","淘宝上传电子保单PDF"),


// 淘宝订阅的消息消费
TAO_BAO_METHOD_MESSAGE_CONSUMER("TAO_BAO_METHOD_MESSAGE_CONSUMER","淘宝订阅的消息消费"),
TAO_BAO_METHOD_MESSAGE_CONFIRM("TAO_BAO_METHOD_MESSAGE_CONFIRM","淘宝订阅的消息消费确认");


private String code;

private String name;

TaoBaoMethodEnums(String code, String name) {
this.code = code;
this.name = name;
}


public String getCode() {
return code;
}


public String getName() {
return name;
}
}

2. 工场模式创建对应的实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class TaoBaoStrategyFactory {
// 生成工厂
private static TaoBaoStrategyFactory factory = new TaoBaoStrategyFactory();

// map 对应方法
private static Map<String, TaoBaoMethodStrategy> taoBaoStrategyMap = new ConcurrentHashMap<>();


static {
// 淘宝天猫-延保协议相关的数据
taoBaoStrategyMap.put(TaoBaoMethodEnums.TAO_BAO_METHOD_INSURANCE_GET_ORDER_LIST.getCode(), new TaoBaoInsuranceGetOrderListClient());
taoBaoStrategyMap.put(TaoBaoMethodEnums.TAO_BAO_METHOD_INSURANCE_PUSH_ORDER_DATA.getCode(), new TaoBaoInsurancePushOrderDataClient());
taoBaoStrategyMap.put(TaoBaoMethodEnums.TAO_BAO_METHOD_INSURANCE_UPLOAD_ORDER_PDF.getCode(), new TaoBaoInsuranceUploadOrderPdfClient());


// 淘宝订阅信息
taoBaoStrategyMap.put(TaoBaoMethodEnums.TAO_BAO_METHOD_MESSAGE_CONSUMER.getCode(), new TaoBaoMessagesConsumeClient());
taoBaoStrategyMap.put(TaoBaoMethodEnums.TAO_BAO_METHOD_MESSAGE_CONFIRM.getCode(), new TaoBaoMessageConfirmClient());
}

private TaoBaoStrategyFactory() {
}

public TaoBaoMethodStrategy getMethod(String type) {
return (TaoBaoMethodStrategy) taoBaoStrategyMap.get(type);
}

public static TaoBaoStrategyFactory getFactory() {
return factory;
}


}

3.策略模式

1
2
3
4
5
6
7
8
9
10
11
12
public class TaoBaoMethodContext {
/**
* 方法选择
* @param type
* @param request
* @return
*/
public String selectMethod(String type, HttpServletRequest request) {
TaoBaoMethodStrategy methodStrategy = TaoBaoStrategyFactory.getFactory().getMethod(type);
return methodStrategy.selectMethod(type, request);
}
}

对应具体的实现接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public interface TaoBaoMethodStrategy {

String selectMethod(String type, HttpServletRequest request);

// 校验当前auth参数是否不为空
default boolean validateAuthNotEmptyParam(Map<String, String> map) {
// url appkey secret sessionKey
if (!map.containsKey("url") || !map.containsKey("appkey") || !map.containsKey("secret") || !map.containsKey("sessionKey")) {
return false;
}

String url = map.get("url");
String appkey = map.get("appkey");
String secret = map.get("secret");
String sessionKey = map.get("sessionKey");
if (StringUtils.isEmpty(url) || StringUtils.isEmpty(appkey) || StringUtils.isEmpty(secret) || StringUtils.isEmpty(sessionKey)) {
return false;
}
return true;
}
}

4. 具体的实现类-列出一个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
public class TaoBaoMessagesConsumeClient implements TaoBaoMethodStrategy {
private static Logger log = LoggerFactory.getLogger(TaoBaoMessagesConsumeClient.class);

@Override
public String selectMethod(String type, HttpServletRequest request) {
// url appkey secret sessionKey
String authStr = request.getParameter("authParams");


// 请求参数,按JSON发送按具体业务
String reqStr = request.getParameter("reqParams");

// 获取对应淘宝的数据
Map<String, String> authMap = JSON.parseObject(authStr, new TypeReference<Map<String, String>>() {
});

Map<String, Object> reqMap = JSON.parseObject(reqStr, new TypeReference<Map<String, Object>>() {
});

// 校验数据
boolean authNotEmptyValidate = this.validateAuthNotEmptyParam(authMap);

if (!authNotEmptyValidate) {
return JSON.toJSONString(Result.failure("authParam参数存在为空"));
}

Result result = this.validateReqParams(reqMap);
if (result != null) {
return JSON.toJSONString(result);
}

String url = authMap.get("url");
String appkey = authMap.get("appkey");
String secret = authMap.get("secret");
String sessionKey = authMap.get("sessionKey");
log.info("淘宝天猫-消息消费-auth参数:{}", authStr);

TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret);

TmcMessagesConsumeRequest req = this.getQuery(reqMap);
log.info("淘宝天猫-消息消费-返回接口req数据:{}", JSON.toJSONString(req));

TmcMessagesConsumeResponse rsp = null;
try {
rsp = client.execute(req, sessionKey);
log.info("淘宝天猫-消息消费-返回接口数据:{}", JSON.toJSONString(rsp));
} catch (ApiException e) {
e.printStackTrace();
}

// 成功获取数据
if (rsp != null && rsp.isSuccess()) {

List<TmcMessage> resultList = new ArrayList<>();
List<TmcMessage> messages = rsp.getMessages();

if (CollectionUtils.isEmpty(rsp.getMessages())) {
return JSON.toJSONString(Result.success(resultList));
}

if (!reqMap.containsKey("topic") || StringUtils.isEmpty(String.valueOf(reqMap.get("topic")))){
return JSON.toJSONString(Result.success(messages));
}
// 如果输入的数据存在topic
String myTopic = String.valueOf(reqMap.get("topic"));

for (TmcMessage message : messages) {
if (message.getTopic().equals(myTopic)){
resultList.add(message);
}
}

return JSON.toJSONString(Result.success(resultList));
} else {
// 数据获取异常
if (rsp == null) {
return JSON.toJSONString(Result.failure("无返回结果"));
} else {
return JSON.toJSONString(Result.failure(rsp.getMsg()));
}
}

}
// alibaba_serviceplatform_ServiceOrder

/**
响应
{
"messages":{
"tmc_message":[
{
"user_id":12345, 消息所属的用户编号
"user_nick":"helloworld", 消息所属的用户编号
"content":"{\"tid\":2895732958732,\"seller_nick\":\"helloworld\"}", 消息详细内容,格式为JSON/XML
"id":123456789, 消息ID
"pub_time":"2000-01-01 00:00:00", 消息发布时间
"pub_app_key":"45671234", 消息发布者的AppKey
"topic":"TradeCreate" 消息所属主题
}
]
}
}
*/

/**
* 获取请求参数
*
* @param reqMap
* @return
*/
private TmcMessagesConsumeRequest getQuery(Map<String, Object> reqMap) {
TmcMessagesConsumeRequest tmcMessagesConsumeRequest = new TmcMessagesConsumeRequest();
if (reqMap.containsKey("groupName") && !StringUtils.isEmpty((String) reqMap.get("groupName"))) {
tmcMessagesConsumeRequest.setGroupName(String.valueOf(reqMap.get("groupName")));
}
if (reqMap.containsKey("quantity") && !StringUtils.isEmpty((String) reqMap.get("quantity"))) {
tmcMessagesConsumeRequest.setQuantity(Long.valueOf(String.valueOf(reqMap.get("quantity"))));
}
return tmcMessagesConsumeRequest;
}




/**
* 获取查询参数
*
* @param reqMap
* @return
*/
private Result validateReqParams(Map<String, Object> reqMap) {
if (!reqMap.containsKey("quantity") || StringUtils.isEmpty(String.valueOf(reqMap.get("quantity")))) {
return Result.failure("参数quantity不能为空");
}
return null;
}
}

5.打包注意

1
2
3
4
5
6
7
8
使用本地对应路径下的jar包进行打包的时候,对应的pom.xml配置
<!-- 使用淘宝SDK -->
<dependency>
<groupId>taobao-sdk-java</groupId>
<artifactId>taobao-sdk-java</artifactId>
<version>1.0.0</version>
<scope>system</scope>
</dependency>

阿里聚石塔-内部服务器搭建
http://example.com/2025/11/29/阿里聚石塔-内部服务器搭建/
作者
TuBoShu
发布于
2025年11月29日
许可协议