Commit 9fe14032bfe5657a4976ad92e56f53473a530230
0 parents
初始化项目
Showing
68 changed files
with
4614 additions
and
0 deletions
Too many changes to show.
To preserve performance only 68 of 212 files are displayed.
.gitignore
0 → 100644
dtms-client/pom.xml
0 → 100644
1 | +++ a/dtms-client/pom.xml | ||
1 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
2 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
3 | + <modelVersion>4.0.0</modelVersion> | ||
4 | + <parent> | ||
5 | + <groupId>com.b2c.dtms</groupId> | ||
6 | + <artifactId>dtms-parent</artifactId> | ||
7 | + <version>0.0.1-SNAPSHOT</version> | ||
8 | + </parent> | ||
9 | + <artifactId>dtms-client</artifactId> | ||
10 | + | ||
11 | + <dependencies> | ||
12 | + <dependency> | ||
13 | + <groupId>org.slf4j</groupId> | ||
14 | + <artifactId>slf4j-api</artifactId> | ||
15 | + </dependency> | ||
16 | + <dependency> | ||
17 | + <groupId>org.apache.httpcomponents</groupId> | ||
18 | + <artifactId>httpclient</artifactId> | ||
19 | + </dependency> | ||
20 | + <dependency> | ||
21 | + <groupId>commons-lang</groupId> | ||
22 | + <artifactId>commons-lang</artifactId> | ||
23 | + </dependency> | ||
24 | + <dependency> | ||
25 | + <groupId>com.alibaba</groupId> | ||
26 | + <artifactId>fastjson</artifactId> | ||
27 | + </dependency> | ||
28 | + <dependency> | ||
29 | + <groupId>junit</groupId> | ||
30 | + <artifactId>junit</artifactId> | ||
31 | + <scope>test</scope> | ||
32 | + </dependency> | ||
33 | + </dependencies> | ||
34 | +</project> | ||
0 | \ No newline at end of file | 35 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/client/DtmsClient.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/client/DtmsClient.java | ||
1 | +package com.b2c.dtms.client; | ||
2 | + | ||
3 | +import org.apache.commons.lang.StringUtils; | ||
4 | + | ||
5 | +import com.alibaba.fastjson.JSON; | ||
6 | +import com.b2c.dtms.client.domain.dto.request.DtmsProduceRequestDto; | ||
7 | +import com.b2c.dtms.client.domain.dto.response.DtmsResponseDto; | ||
8 | +import com.b2c.dtms.common.http.HttpRequester; | ||
9 | +import com.b2c.dtms.common.http.HttpResponse; | ||
10 | + | ||
11 | +public class DtmsClient { | ||
12 | + | ||
13 | + public static final String DTMS_URL = "http://dtms.zandeapp.com"; | ||
14 | + | ||
15 | + public DtmsResponseDto produceMessage(DtmsProduceRequestDto message) { | ||
16 | + HttpResponse httpResponse; | ||
17 | + try { | ||
18 | + httpResponse = HttpRequester.sendPost(DTMS_URL + "/api/rest/produce", null, JSON.toJSONString(message)); | ||
19 | + if (httpResponse == null) { | ||
20 | + return null; | ||
21 | + } | ||
22 | + if (httpResponse.getStatusCode() != 200) { | ||
23 | + DtmsResponseDto response = new DtmsResponseDto(); | ||
24 | + response.setMessage(String.format("无法完成请求,响应码%d", httpResponse.getStatusCode())); | ||
25 | + return response; | ||
26 | + } | ||
27 | + if (StringUtils.isBlank(httpResponse.getBody())) { | ||
28 | + return null; | ||
29 | + } | ||
30 | + return JSON.parseObject(httpResponse.getBody(), DtmsResponseDto.class); | ||
31 | + } catch (Exception e) { | ||
32 | + DtmsResponseDto response = new DtmsResponseDto(); | ||
33 | + response.setMessage(e.getMessage()); | ||
34 | + return response; | ||
35 | + } | ||
36 | + | ||
37 | + } | ||
38 | +} |
dtms-client/src/main/java/com/b2c/dtms/client/domain/dto/request/DtmsProduceRequestDto.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/client/domain/dto/request/DtmsProduceRequestDto.java | ||
1 | +package com.b2c.dtms.client.domain.dto.request; | ||
2 | + | ||
3 | +import java.io.Serializable; | ||
4 | +import java.util.Date; | ||
5 | + | ||
6 | +public class DtmsProduceRequestDto implements Serializable { | ||
7 | + | ||
8 | + /** | ||
9 | + * | ||
10 | + */ | ||
11 | + private static final long serialVersionUID = 5709408209577989985L; | ||
12 | + | ||
13 | + /** | ||
14 | + * 消息业务ID,比如订单id | ||
15 | + */ | ||
16 | + private String bizId; | ||
17 | + | ||
18 | + /** | ||
19 | + * 延迟多久开始消息开始被执行 | ||
20 | + */ | ||
21 | + private Integer delaySeconds; | ||
22 | + | ||
23 | + /** | ||
24 | + * 期望运行时间,由DTMS服务时间+delaySeconds时间换算而来 | ||
25 | + */ | ||
26 | + private Date runtime; | ||
27 | + | ||
28 | + /** | ||
29 | + * 消息内容 | ||
30 | + */ | ||
31 | + private String content; | ||
32 | + | ||
33 | + /** | ||
34 | + * 消息备注 | ||
35 | + */ | ||
36 | + private String memo; | ||
37 | + | ||
38 | + /** | ||
39 | + * 消息待重试处理次数,由输入设置,此处不设置默认值 | ||
40 | + */ | ||
41 | + private Long waitRetryNum; | ||
42 | + | ||
43 | + /** | ||
44 | + * 消息关联业务处理url | ||
45 | + */ | ||
46 | + private String callUrl; | ||
47 | + | ||
48 | + /** | ||
49 | + * 二次确认url | ||
50 | + */ | ||
51 | + private String confirmUrl; | ||
52 | + | ||
53 | + /** 非业务消息类型 */ | ||
54 | + private Integer type; | ||
55 | + | ||
56 | + public String getBizId() { | ||
57 | + return bizId; | ||
58 | + } | ||
59 | + | ||
60 | + public void setBizId(String bizId) { | ||
61 | + this.bizId = bizId; | ||
62 | + } | ||
63 | + | ||
64 | + public Integer getDelaySeconds() { | ||
65 | + return delaySeconds; | ||
66 | + } | ||
67 | + | ||
68 | + public void setDelaySeconds(Integer delaySeconds) { | ||
69 | + this.delaySeconds = delaySeconds; | ||
70 | + } | ||
71 | + | ||
72 | + public Date getRuntime() { | ||
73 | + return runtime; | ||
74 | + } | ||
75 | + | ||
76 | + public void setRuntime(Date runtime) { | ||
77 | + this.runtime = runtime; | ||
78 | + } | ||
79 | + | ||
80 | + public String getContent() { | ||
81 | + return content; | ||
82 | + } | ||
83 | + | ||
84 | + public void setContent(String content) { | ||
85 | + this.content = content; | ||
86 | + } | ||
87 | + | ||
88 | + public String getMemo() { | ||
89 | + return memo; | ||
90 | + } | ||
91 | + | ||
92 | + public void setMemo(String memo) { | ||
93 | + this.memo = memo; | ||
94 | + } | ||
95 | + | ||
96 | + public Long getWaitRetryNum() { | ||
97 | + return waitRetryNum; | ||
98 | + } | ||
99 | + | ||
100 | + public void setWaitRetryNum(Long waitRetryNum) { | ||
101 | + this.waitRetryNum = waitRetryNum; | ||
102 | + } | ||
103 | + | ||
104 | + public String getCallUrl() { | ||
105 | + return callUrl; | ||
106 | + } | ||
107 | + | ||
108 | + public void setCallUrl(String callUrl) { | ||
109 | + this.callUrl = callUrl; | ||
110 | + } | ||
111 | + | ||
112 | + public String getConfirmUrl() { | ||
113 | + return confirmUrl; | ||
114 | + } | ||
115 | + | ||
116 | + public void setConfirmUrl(String confirmUrl) { | ||
117 | + this.confirmUrl = confirmUrl; | ||
118 | + } | ||
119 | + | ||
120 | + public Integer getType() { | ||
121 | + return type; | ||
122 | + } | ||
123 | + | ||
124 | + public void setType(Integer type) { | ||
125 | + this.type = type; | ||
126 | + } | ||
127 | +} |
dtms-client/src/main/java/com/b2c/dtms/client/domain/dto/response/DtmsResponseDto.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/client/domain/dto/response/DtmsResponseDto.java | ||
1 | +package com.b2c.dtms.client.domain.dto.response; | ||
2 | + | ||
3 | +import java.io.Serializable; | ||
4 | + | ||
5 | +public class DtmsResponseDto implements Serializable { | ||
6 | + | ||
7 | + /** | ||
8 | + * | ||
9 | + */ | ||
10 | + private static final long serialVersionUID = 5684376067147968413L; | ||
11 | + | ||
12 | + public static final String CODE_SUCCESS = "SUCCESS"; | ||
13 | + public static final String CODE_FAILED = "FAILED"; | ||
14 | + | ||
15 | + private String code = CODE_FAILED; | ||
16 | + private String message; | ||
17 | + | ||
18 | + public String getCode() { | ||
19 | + return code; | ||
20 | + } | ||
21 | + | ||
22 | + public void setCode(String code) { | ||
23 | + this.code = code; | ||
24 | + } | ||
25 | + | ||
26 | + public String getMessage() { | ||
27 | + return message; | ||
28 | + } | ||
29 | + | ||
30 | + public void setMessage(String message) { | ||
31 | + this.message = message; | ||
32 | + } | ||
33 | + | ||
34 | + @Override | ||
35 | + public String toString() { | ||
36 | + return "DtmsResponseDto [code=" + code + ", message=" + message + "]"; | ||
37 | + } | ||
38 | + | ||
39 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/ConfirmCode.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/ConfirmCode.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +public enum ConfirmCode{ | ||
5 | + SUCCESS("SUCCESS"),//确认成功,需要执行消息 | ||
6 | + FAILED("FAILED"),//确认不成功,不能执行消息 | ||
7 | + UNKNOWN("UNKNOWN");//确认结果不明确,比如确认结果为空等,不能执行消息 | ||
8 | + private String code; | ||
9 | + | ||
10 | + private ConfirmCode(String code){ | ||
11 | + this.code=code; | ||
12 | + } | ||
13 | + public static ConfirmCode getConfirmCode(String code) { | ||
14 | + for (ConfirmCode c : ConfirmCode.values()) { | ||
15 | + if (c.code().equals(code)) { | ||
16 | + return c; | ||
17 | + } | ||
18 | + } | ||
19 | + return null; | ||
20 | + } | ||
21 | + | ||
22 | + public String code(){ | ||
23 | + return this.code; | ||
24 | + } | ||
25 | +} | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsHandlerType.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsHandlerType.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +public enum DtmsHandlerType { | ||
5 | + | ||
6 | + /** 工厂bean */ | ||
7 | + FACTORYBEAN(10,"spring-Bean"), | ||
8 | + /** 反射类 */ | ||
9 | + CLASSNAME(20,"Java-Class"), | ||
10 | + /**Groovy 脚本*/ | ||
11 | + GROOVY_SCRIPT(30,"Groovy-script"), | ||
12 | + /**Groovy task接口实现*/ | ||
13 | + GROOVY_TASKHANDLE(40,"Groovy-Task"), | ||
14 | + /**HTTP URL调用*/ | ||
15 | + HTTP_URL(50,"HTTP-URL"); | ||
16 | + | ||
17 | + private int index; | ||
18 | + private String name; | ||
19 | + | ||
20 | + public static DtmsHandlerType getEnum(int index) { | ||
21 | + for (DtmsHandlerType c : DtmsHandlerType.values()) { | ||
22 | + if (c.getIndex() == index) { | ||
23 | + return c; | ||
24 | + } | ||
25 | + } | ||
26 | + return null; | ||
27 | + } | ||
28 | + | ||
29 | + private DtmsHandlerType(int index,String name) { | ||
30 | + this.index = index; | ||
31 | + this.name = name; | ||
32 | + } | ||
33 | + | ||
34 | + public int getIndex() { | ||
35 | + return index; | ||
36 | + } | ||
37 | + | ||
38 | + public void setIndex(int index) { | ||
39 | + this.index = index; | ||
40 | + } | ||
41 | + | ||
42 | + | ||
43 | + public String getName() { | ||
44 | + return name; | ||
45 | + } | ||
46 | + | ||
47 | + | ||
48 | + public void setName(String name) { | ||
49 | + this.name = name; | ||
50 | + } | ||
51 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageConfigStatus.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageConfigStatus.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +/** | ||
5 | + * 消息配置状态 | ||
6 | + */ | ||
7 | +public enum DtmsMessageConfigStatus { | ||
8 | + | ||
9 | + /**不可用*/ | ||
10 | + Disabled(0), | ||
11 | + /**可用*/ | ||
12 | + Available(1); | ||
13 | + | ||
14 | + private int code; | ||
15 | + | ||
16 | + private DtmsMessageConfigStatus(int code) { | ||
17 | + this.code = code; | ||
18 | + } | ||
19 | + | ||
20 | + public static DtmsMessageConfigStatus getStatus(int code) { | ||
21 | + for (DtmsMessageConfigStatus c : DtmsMessageConfigStatus.values()) { | ||
22 | + if (c.code()==code) { | ||
23 | + return c; | ||
24 | + } | ||
25 | + } | ||
26 | + return null; | ||
27 | + } | ||
28 | + | ||
29 | + public int code(){ | ||
30 | + return this.code; | ||
31 | + } | ||
32 | +} | ||
0 | \ No newline at end of file | 33 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageStatus.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageStatus.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +/** | ||
5 | + * 消息状态 | ||
6 | + */ | ||
7 | +public enum DtmsMessageStatus { | ||
8 | + | ||
9 | + /**待处理*/ | ||
10 | + WaitProcess(10), | ||
11 | + /**已二次确认 消息可以直接被执行*/ | ||
12 | + SecondConfirmed(20), | ||
13 | + /**已处理*/ | ||
14 | + Porcessed(30), | ||
15 | + /**异常*/ | ||
16 | + Exception(40); | ||
17 | + | ||
18 | + private int code; | ||
19 | + | ||
20 | + private DtmsMessageStatus(int code) { | ||
21 | + this.code = code; | ||
22 | + } | ||
23 | + | ||
24 | + public static DtmsMessageStatus getStatus(int code) { | ||
25 | + for (DtmsMessageStatus c : DtmsMessageStatus.values()) { | ||
26 | + if (c.code()==code) { | ||
27 | + return c; | ||
28 | + } | ||
29 | + } | ||
30 | + return null; | ||
31 | + } | ||
32 | + | ||
33 | + public int code(){ | ||
34 | + return this.code; | ||
35 | + } | ||
36 | +} | ||
0 | \ No newline at end of file | 37 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageTopic.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageTopic.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | +import org.apache.commons.lang.StringUtils; | ||
4 | + | ||
5 | +/** | ||
6 | + * DTMS业务消息类型 | ||
7 | + */ | ||
8 | +public enum DtmsMessageTopic { | ||
9 | + /** 订单或代购单取消(含备货中申请退款)通知物流 */ | ||
10 | + NoticeLogistics("NoticeLogistics"), | ||
11 | + /** MQ */ | ||
12 | + SendMq("SendMq"), | ||
13 | + /** 短信 */ | ||
14 | + Sms("Sms"), | ||
15 | + /** 发送消息中心消息提醒 */ | ||
16 | + SendNotice("SendNotice"), | ||
17 | + /** 增加供应商库存 */ | ||
18 | + IncraseSupStockNum("IncraseSupStockNum"), | ||
19 | + /** 扣减供应商库存 */ | ||
20 | + DecraseSupStockNum("DecraseSupStockNum"), | ||
21 | + /** 增加网站库存 */ | ||
22 | + IncraseStockNum("IncraseStockNum"), | ||
23 | + /** 扣减网站库存 */ | ||
24 | + DecraseStockNum("DecraseStockNum"), | ||
25 | + /** 扣减用户信用额度 */ | ||
26 | + DecraseUserCredit("DecraseUserCredit"), | ||
27 | + /** 返还(增加)用户信用额度 */ | ||
28 | + IncraseUserCredit("IncraseUserCredit"), | ||
29 | + /** 创建交易*/ | ||
30 | + TradeCreate("TradeCreate"), | ||
31 | + /** 关闭交易*/ | ||
32 | + TradeClose("TradeClose"), | ||
33 | + /** 交易退款*/ | ||
34 | + TradeRefund("TradeRefund"), | ||
35 | + /** 交易-卖家发货dili.payment.trade.sendGoods */ | ||
36 | + TradeSendGoods("TradeSendGoods"), | ||
37 | + /** 交易-修改交易金额*/ | ||
38 | + TradeUpdateAmount("TradeUpdateAmount"), | ||
39 | + | ||
40 | + /** 保存服务 */ | ||
41 | + SrvceSave("SrvceSave"), | ||
42 | + /** 取消服务 */ | ||
43 | + SrvceCancel("SrvceCancel"), | ||
44 | + /** 暂停服务 */ | ||
45 | + SrvcePause("SrvcePause"), | ||
46 | + /** 恢复服务 */ | ||
47 | + SrvceRestore("SrvceRestore"), | ||
48 | + /** 增加供应商已代销数量(调用商品库远程接口) */ | ||
49 | + IncrasePopGenerationSales("IncrasePopGenerationSales"), | ||
50 | + /** 订单自动定时增加评论 */ | ||
51 | + OrderAutoComment("OrderAutoComment"), | ||
52 | + /** 执行callurl中的远程调用 */ | ||
53 | + CallUrl("CallUrl"); | ||
54 | + | ||
55 | + // 成员变量 | ||
56 | + private String code; | ||
57 | + | ||
58 | + // 构造方法 | ||
59 | + private DtmsMessageTopic(String code) { | ||
60 | + this.code = code; | ||
61 | + } | ||
62 | + | ||
63 | + public static DtmsMessageTopic getTopic(String code) { | ||
64 | + for (DtmsMessageTopic c : DtmsMessageTopic.values()) { | ||
65 | + if (StringUtils.equals(c.code, code)) { | ||
66 | + return c; | ||
67 | + } | ||
68 | + } | ||
69 | + return null; | ||
70 | + } | ||
71 | + | ||
72 | + public String code(){ | ||
73 | + return this.code; | ||
74 | + } | ||
75 | +} | ||
0 | \ No newline at end of file | 76 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageType.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/DtmsMessageType.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +/** | ||
5 | + * DTMS内部消息类型 | ||
6 | + */ | ||
7 | +public enum DtmsMessageType { | ||
8 | + | ||
9 | + /**普通消息*/ | ||
10 | + Common(1), | ||
11 | + /**定时消息(一次执行),执行成功之后不再执行 */ | ||
12 | + Timer(2), | ||
13 | + /**定时消息(周期执行)*/ | ||
14 | + PeriodicTimer(3); | ||
15 | + | ||
16 | + // 成员变量 | ||
17 | + private int code; | ||
18 | + | ||
19 | + // 构造方法 | ||
20 | + private DtmsMessageType(int code) { | ||
21 | + this.code = code; | ||
22 | + } | ||
23 | + | ||
24 | + public static DtmsMessageType getTopic(int code) { | ||
25 | + for (DtmsMessageType c : DtmsMessageType.values()) { | ||
26 | + if (c.code==code) { | ||
27 | + return c; | ||
28 | + } | ||
29 | + } | ||
30 | + return null; | ||
31 | + } | ||
32 | + | ||
33 | + public int code(){ | ||
34 | + return this.code; | ||
35 | + } | ||
36 | +} | ||
0 | \ No newline at end of file | 37 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/HandleCode.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/HandleCode.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +public enum HandleCode{ | ||
5 | + SUCCESS("SUCCESS"),//处理成功 | ||
6 | + FAILED("FAILED"),//处理失败 | ||
7 | + CONFIRM_FAILED("CONFIRM_FAILED");//二次确认失败 | ||
8 | + private String code; | ||
9 | + | ||
10 | + private HandleCode(String code){ | ||
11 | + this.code=code; | ||
12 | + } | ||
13 | + public static HandleCode getHandleCode(String code) { | ||
14 | + for (HandleCode c : HandleCode.values()) { | ||
15 | + if (c.code().equals(code)) { | ||
16 | + return c; | ||
17 | + } | ||
18 | + } | ||
19 | + return null; | ||
20 | + } | ||
21 | + | ||
22 | + public String code(){ | ||
23 | + return this.code; | ||
24 | + } | ||
25 | +} | ||
0 | \ No newline at end of file | 26 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/LockStatus.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/LockStatus.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | +public enum LockStatus { | ||
4 | + | ||
5 | + | ||
6 | + /** 未锁定 */ | ||
7 | + UNLOCK(0), | ||
8 | + /** 锁定中 */ | ||
9 | + LOCKING(1); | ||
10 | + | ||
11 | + private int index; | ||
12 | + | ||
13 | + public static LockStatus getEnum(int index) { | ||
14 | + for (LockStatus c : LockStatus.values()) { | ||
15 | + if (c.getIndex() == index) { | ||
16 | + return c; | ||
17 | + } | ||
18 | + } | ||
19 | + return null; | ||
20 | + } | ||
21 | + | ||
22 | + private LockStatus(int index) { | ||
23 | + this.index = index; | ||
24 | + } | ||
25 | + | ||
26 | + public int getIndex() { | ||
27 | + return index; | ||
28 | + } | ||
29 | + | ||
30 | + public void setIndex(int index) { | ||
31 | + this.index = index; | ||
32 | + } | ||
33 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/TimeUnit.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/enums/dtms/TimeUnit.java | ||
1 | +package com.b2c.dtms.common.enums.dtms; | ||
2 | + | ||
3 | + | ||
4 | +/** | ||
5 | + * 时间单位 | ||
6 | + */ | ||
7 | +public enum TimeUnit { | ||
8 | + | ||
9 | + MilliSecond(10), | ||
10 | + Second(20), | ||
11 | + Minute(30), | ||
12 | + Hour(40), | ||
13 | + Day(50); | ||
14 | + | ||
15 | + private int index; | ||
16 | + | ||
17 | + private TimeUnit(int index) { | ||
18 | + this.index = index; | ||
19 | + } | ||
20 | + | ||
21 | + public static TimeUnit getTimeUnit(int index) { | ||
22 | + for (TimeUnit c : TimeUnit.values()) { | ||
23 | + if (c.index()==index) { | ||
24 | + return c; | ||
25 | + } | ||
26 | + } | ||
27 | + return null; | ||
28 | + } | ||
29 | + | ||
30 | + public int index(){ | ||
31 | + return this.index; | ||
32 | + } | ||
33 | +} | ||
0 | \ No newline at end of file | 34 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/http/ExpiredConnMonitorThread.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/ExpiredConnMonitorThread.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import org.slf4j.Logger; | ||
4 | +import org.slf4j.LoggerFactory; | ||
5 | + | ||
6 | +import java.util.concurrent.TimeUnit; | ||
7 | + | ||
8 | + | ||
9 | + | ||
10 | +/** | ||
11 | + * | ||
12 | + * 守护线程,释放过期连接<p> | ||
13 | + * 经典阻塞I/O模型的一个主要缺点就是只有当阻塞I/O时,socket才能对I/O事件做出反应。 | ||
14 | + * 当连接被管理器收回后,这个连接仍然存活,但是却无法监控socket的状态,也无法对I/O事件做出反馈。 | ||
15 | + * 如果连接被服务器端关闭了,客户端监测不到连接的状态变化(也就无法根据连接状态的变化,关闭本地的socket)。 | ||
16 | + * HttpClient为了缓解这一问题造成的影响,会在使用某个连接前,监测这个连接是否已经过时,如果服务器端关闭了连接, | ||
17 | + * 那么连接就会失效。这种过时检查并不是100%有效,并且会给每个请求增加10到30毫秒额外开销。唯一一个可行的, | ||
18 | + * 且does not involve a one thread per socket model for idle connections的解决办法,是建立一个监控线程,来专门回收由于长时间不活动而被判定为失效的连接。 | ||
19 | + * 这个监控线程可以周期性的调用ClientConnectionManager类的closeExpiredConnections()方法来关闭过期的连接, | ||
20 | + * 回收连接池中被关闭的连接,也可以选择性的调用ClientConnectionManager类的closeIdleConnections()方法来关闭一段时间内不活动的连接。 | ||
21 | + */ | ||
22 | +public class ExpiredConnMonitorThread extends Thread { | ||
23 | + | ||
24 | + private static final Logger LOGGER = LoggerFactory.getLogger(ExpiredConnMonitorThread.class); | ||
25 | + | ||
26 | + private final HttpClientConnectionPoolManager connMgr; | ||
27 | + | ||
28 | + private volatile boolean shutdown; | ||
29 | + | ||
30 | + public ExpiredConnMonitorThread(HttpClientConnectionPoolManager connMgr,boolean isDaemon) { | ||
31 | + super(); | ||
32 | + this.setName("expired-connection-monitor"); | ||
33 | + this.connMgr = connMgr; | ||
34 | + this.setDaemon(isDaemon); | ||
35 | + } | ||
36 | + | ||
37 | + @Override | ||
38 | + public void run() { | ||
39 | + try { | ||
40 | + while(!shutdown){ | ||
41 | + synchronized(this){ | ||
42 | + wait(20*1000); | ||
43 | + if(connMgr!=null){ | ||
44 | + // Close expired connections | ||
45 | + LOGGER.debug("关闭过期和超过空闲设定值的http请求连接..."); | ||
46 | + connMgr.closeExpiredConnections(); | ||
47 | + // Optionally, close connections | ||
48 | + // that have been idle longer than 30 sec | ||
49 | + connMgr.closeIdleConnections(30, TimeUnit.SECONDS); | ||
50 | + LOGGER.debug("关闭过期和超过空闲设定值的http请求连接完成"); | ||
51 | + } | ||
52 | + } | ||
53 | + } | ||
54 | + } catch (Exception ex) { | ||
55 | + shutdown(); | ||
56 | + } | ||
57 | + } | ||
58 | + | ||
59 | + public void shutdown() { | ||
60 | + shutdown = true; | ||
61 | + synchronized (this) { | ||
62 | + notifyAll(); | ||
63 | + } | ||
64 | + } | ||
65 | +} | ||
66 | + |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpClientConnectionPoolManager.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpClientConnectionPoolManager.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import org.apache.http.config.SocketConfig; | ||
4 | +import org.apache.http.conn.ssl.AllowAllHostnameVerifier; | ||
5 | +import org.apache.http.impl.client.CloseableHttpClient; | ||
6 | +import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; | ||
7 | +import org.apache.http.impl.client.HttpClientBuilder; | ||
8 | +import org.apache.http.impl.client.HttpClients; | ||
9 | +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; | ||
10 | + | ||
11 | +import javax.net.ssl.KeyManagerFactory; | ||
12 | +import javax.net.ssl.SSLContext; | ||
13 | +import javax.net.ssl.TrustManager; | ||
14 | +import javax.net.ssl.TrustManagerFactory; | ||
15 | +import java.io.FileInputStream; | ||
16 | +import java.io.IOException; | ||
17 | +import java.io.InputStream; | ||
18 | +import java.security.*; | ||
19 | +import java.security.cert.CertificateException; | ||
20 | +import java.util.concurrent.TimeUnit; | ||
21 | + | ||
22 | + | ||
23 | +public class HttpClientConnectionPoolManager { | ||
24 | + | ||
25 | + private static PoolingHttpClientConnectionManager clientConnectionManager = null; | ||
26 | + private int maxTotal = 50;//设置整个连接池最大连接数 根据自己的场景决定 | ||
27 | + private int defaultMaxPerRoute = 25; //每个路由最大连接数,一个服务端相当于1个路由,有多少个服务端(域名或者IP)就有多少个路由 | ||
28 | + | ||
29 | + private HttpClientBuilder httpClientBuilder; | ||
30 | + | ||
31 | + | ||
32 | + private CloseableHttpClient httpClient; | ||
33 | + | ||
34 | + private HttpClientBuilder httpsClientBuilder; | ||
35 | + private CloseableHttpClient httpsClient; | ||
36 | + | ||
37 | + private static HttpClientConnectionPoolManager poolManager = null; | ||
38 | + | ||
39 | + private SocketConfig getCustomSocketConfig(){ | ||
40 | + SocketConfig socketConfig=SocketConfig.custom() | ||
41 | + .setTcpNoDelay(true)//Nagle算法试图通过减少分片的数量来节省带宽。当应用程序希望降低网络延迟并提高性能时,可以关闭Nagle算法,这样数据将会更早地发送,但会增加网络消耗 | ||
42 | + .build(); | ||
43 | + return socketConfig; | ||
44 | + } | ||
45 | + | ||
46 | + private HttpClientConnectionPoolManager(int maxTotal, int defaultMaxPerRoute){ | ||
47 | + this.maxTotal = maxTotal; | ||
48 | + this.defaultMaxPerRoute = defaultMaxPerRoute; | ||
49 | + clientConnectionManager=new PoolingHttpClientConnectionManager(); | ||
50 | + clientConnectionManager.setMaxTotal(maxTotal); | ||
51 | + clientConnectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute); | ||
52 | + clientConnectionManager.setDefaultSocketConfig(getCustomSocketConfig()); | ||
53 | + buildHttpClient(); | ||
54 | + } | ||
55 | + | ||
56 | + | ||
57 | + private HttpClientConnectionPoolManager(){ | ||
58 | + clientConnectionManager=new PoolingHttpClientConnectionManager(); | ||
59 | + clientConnectionManager.setMaxTotal(maxTotal); | ||
60 | + clientConnectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute); | ||
61 | + clientConnectionManager.setDefaultSocketConfig(getCustomSocketConfig()); | ||
62 | + buildHttpClient(); | ||
63 | + } | ||
64 | + | ||
65 | + private void buildHttpClient(){ | ||
66 | + //HTTP | ||
67 | + httpClientBuilder=HttpClients.custom().setConnectionManager(clientConnectionManager); | ||
68 | + httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false));//重试次数,设置不重试 | ||
69 | + httpClientBuilder.setHostnameVerifier(new AllowAllHostnameVerifier()); //忽略域名一致性验证 | ||
70 | + httpClientBuilder.setKeepAliveStrategy(new HttpConnectionKeepAliveStrategy()); | ||
71 | + httpClient=httpClientBuilder.build(); | ||
72 | + | ||
73 | + //HTTPS | ||
74 | + httpsClientBuilder=HttpClients.custom().setConnectionManager(clientConnectionManager); | ||
75 | + httpsClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(0, false));//重试次数,设置不重试 | ||
76 | + httpsClientBuilder.setHostnameVerifier(new AllowAllHostnameVerifier()); //忽略域名一致性验证 | ||
77 | + httpsClientBuilder.setKeepAliveStrategy(new HttpConnectionKeepAliveStrategy()); | ||
78 | + try { | ||
79 | + SSLContext sslContext = SSLContext.getInstance("SSL"); | ||
80 | + sslContext.init(null, new TrustManager[] {new TrustAllCertManager()}, null); | ||
81 | + httpsClientBuilder.setSslcontext(sslContext); | ||
82 | + } catch (Exception e) { | ||
83 | + throw new RuntimeException(e); | ||
84 | + } | ||
85 | + httpsClient=httpsClientBuilder.build(); | ||
86 | + } | ||
87 | + | ||
88 | + | ||
89 | + | ||
90 | + /** | ||
91 | + * 获取http client池管理器 | ||
92 | + * @return | ||
93 | + */ | ||
94 | + public synchronized static HttpClientConnectionPoolManager getInstance(){ | ||
95 | + if(poolManager == null){ | ||
96 | + poolManager = new HttpClientConnectionPoolManager(); | ||
97 | + } | ||
98 | + return poolManager; | ||
99 | + } | ||
100 | + | ||
101 | + /** | ||
102 | + * 获取http client池管理器 | ||
103 | + * @param maxTotal 连接池最大连接数 | ||
104 | + * @param defaultMaxPerRoute 每个路由最大连接数 | ||
105 | + * @return | ||
106 | + */ | ||
107 | + public synchronized static HttpClientConnectionPoolManager getInstance(int maxTotal, int defaultMaxPerRoute){ | ||
108 | + if(poolManager == null){ | ||
109 | + poolManager = new HttpClientConnectionPoolManager(maxTotal, defaultMaxPerRoute); | ||
110 | + } | ||
111 | + return poolManager; | ||
112 | + } | ||
113 | + | ||
114 | + /** | ||
115 | + * 获取http client | ||
116 | + * @return | ||
117 | + */ | ||
118 | + public CloseableHttpClient getHttpClient(){ | ||
119 | + if(poolManager == null){ | ||
120 | + getInstance(); | ||
121 | + } | ||
122 | + return httpClient; | ||
123 | + } | ||
124 | + | ||
125 | + /** | ||
126 | + * 获取仅服务端单向认证的https client | ||
127 | + * @return | ||
128 | + * @throws NoSuchAlgorithmException | ||
129 | + * @throws KeyManagementException | ||
130 | + */ | ||
131 | + public CloseableHttpClient getCommonHttpsClient() throws NoSuchAlgorithmException, KeyManagementException{ | ||
132 | + if(poolManager == null){ | ||
133 | + getInstance(); | ||
134 | + } | ||
135 | + return httpsClient; | ||
136 | + } | ||
137 | + | ||
138 | + /** | ||
139 | + * 获取双向认证的https client | ||
140 | + * @param certStoreType | ||
141 | + * @param certStorePath | ||
142 | + * @param certStorePassword | ||
143 | + * @return | ||
144 | + * @throws NoSuchAlgorithmException | ||
145 | + * @throws KeyManagementException | ||
146 | + * @throws KeyStoreException | ||
147 | + * @throws CertificateException | ||
148 | + * @throws IOException | ||
149 | + * @throws UnrecoverableKeyException | ||
150 | + */ | ||
151 | + public CloseableHttpClient getStrictHttpsClient(String certStoreType, String certStorePath, String certStorePassword) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, CertificateException, IOException, UnrecoverableKeyException{ | ||
152 | + if(poolManager == null){ | ||
153 | + getInstance(); | ||
154 | + } | ||
155 | + | ||
156 | + // KeyStore keyStore = KeyStore.getInstance("jks"); | ||
157 | + // KeyStore keyStore = KeyStore.getInstance("pkcs12"); | ||
158 | + KeyStore keyStore = KeyStore.getInstance(certStoreType); | ||
159 | + InputStream in = new FileInputStream(certStorePath); | ||
160 | + keyStore.load(in, certStorePassword.toCharArray()); | ||
161 | + | ||
162 | + KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509"); | ||
163 | + kmf.init(keyStore, certStorePassword.toCharArray()); | ||
164 | + | ||
165 | + TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509"); | ||
166 | + tmf.init(keyStore); | ||
167 | + | ||
168 | + SSLContext sslContext = SSLContext.getInstance("SSL"); | ||
169 | + sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); | ||
170 | + httpsClientBuilder.setSslcontext(sslContext); | ||
171 | + return httpsClientBuilder.build(); | ||
172 | + } | ||
173 | + | ||
174 | + public void closeExpiredConnections(){ | ||
175 | + if(clientConnectionManager!=null){ | ||
176 | + clientConnectionManager.closeExpiredConnections(); | ||
177 | + } | ||
178 | + } | ||
179 | + | ||
180 | + public void close(){ | ||
181 | + if(clientConnectionManager!=null){ | ||
182 | + clientConnectionManager.close(); | ||
183 | + } | ||
184 | + } | ||
185 | + | ||
186 | + public void closeIdleConnections(int idleTimeout, TimeUnit timeUnit) { | ||
187 | + if(clientConnectionManager!=null){ | ||
188 | + clientConnectionManager.closeIdleConnections(idleTimeout, timeUnit); | ||
189 | + } | ||
190 | + } | ||
191 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpConnectionKeepAliveStrategy.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpConnectionKeepAliveStrategy.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import org.apache.http.HeaderElement; | ||
4 | +import org.apache.http.HeaderElementIterator; | ||
5 | +import org.apache.http.HttpResponse; | ||
6 | +import org.apache.http.conn.ConnectionKeepAliveStrategy; | ||
7 | +import org.apache.http.message.BasicHeaderElementIterator; | ||
8 | +import org.apache.http.protocol.HTTP; | ||
9 | +import org.apache.http.protocol.HttpContext; | ||
10 | + | ||
11 | + | ||
12 | +public class HttpConnectionKeepAliveStrategy implements ConnectionKeepAliveStrategy{ | ||
13 | + | ||
14 | + @Override | ||
15 | + public long getKeepAliveDuration(HttpResponse response, HttpContext context) { | ||
16 | + HeaderElementIterator it = new BasicHeaderElementIterator(response.headerIterator(HTTP.CONN_KEEP_ALIVE)); | ||
17 | + while (it.hasNext()) { | ||
18 | + HeaderElement he = it.nextElement(); | ||
19 | + String param = he.getName(); | ||
20 | + String value = he.getValue(); | ||
21 | + if (value != null && param.equalsIgnoreCase("timeout")) { | ||
22 | + try { | ||
23 | + return Long.parseLong(value) * 1000; | ||
24 | + } catch(NumberFormatException ignore) { | ||
25 | + } | ||
26 | + } | ||
27 | + } | ||
28 | + return 60 * 1000; //保持连接60s在连接池中可用,可用于处理多次请求 | ||
29 | + } | ||
30 | + | ||
31 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpHeaders.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpHeaders.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | + | ||
4 | + | ||
5 | + | ||
6 | +public class HttpHeaders { | ||
7 | + public static final String ACCEPT = "Accept"; | ||
8 | + public static final String ACCEPT_CHARSET = "Accept-Charset"; | ||
9 | + public static final String ALLOW = "Allow"; | ||
10 | + public static final String CACHE_CONTROL = "Cache-Control"; | ||
11 | + public static final String CONTENT_DISPOSITION = "Content-Disposition"; | ||
12 | + public static final String CONTENT_LENGTH = "Content-Length"; | ||
13 | + public static final String CONTENT_TYPE = "Content-Type"; | ||
14 | + public static final String DATE = "Date"; | ||
15 | + public static final String ETAG = "ETag"; | ||
16 | + public static final String EXPIRES = "Expires"; | ||
17 | + public static final String IF_MODIFIED_SINCE = "If-Modified-Since"; | ||
18 | + public static final String IF_NONE_MATCH = "If-None-Match"; | ||
19 | + public static final String LAST_MODIFIED = "Last-Modified"; | ||
20 | + public static final String LOCATION = "Location"; | ||
21 | + public static final String PRAGMA = "Pragma"; | ||
22 | + public static final String TRANSFER_ENCODING = "Transfer-Encoding"; | ||
23 | + public static final String CONNECTION = "Connection"; | ||
24 | + public static final String SERVER = "Server"; | ||
25 | + public static final String REFERER = "Referer"; | ||
26 | + public static final String USER_AGENT = "User-Agent"; | ||
27 | + public static final String HOST = "Host"; | ||
28 | + public static final String RANGE = "Range"; | ||
29 | + public static final String CONTENT_RANGE = "Content_Range"; | ||
30 | + public static final String CONTENT_ENCODING = "Content-Encoding"; | ||
31 | + public static final String VARY = "Vary"; | ||
32 | + public static final String X_POWERED_BY = "X-Powered-By"; | ||
33 | + public static final String X_CACHE = "X_Cache"; | ||
34 | + public static final String AGE = "Age"; | ||
35 | + public static final String MAX_AGE = "Max-Age"; | ||
36 | + public static final String SET_COOKIE="Set-Cookie"; | ||
37 | + public static final String COOKIE="Cookie"; | ||
38 | + public static final String SESSION_ID="session_id"; | ||
39 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpMethod.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpMethod.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import org.apache.http.client.config.RequestConfig; | ||
4 | +import org.apache.http.client.methods.HttpGet; | ||
5 | +import org.apache.http.client.methods.HttpPost; | ||
6 | +import org.apache.http.entity.StringEntity; | ||
7 | + | ||
8 | +import java.io.UnsupportedEncodingException; | ||
9 | +import java.net.URISyntaxException; | ||
10 | +import java.nio.charset.Charset; | ||
11 | +import java.util.Map; | ||
12 | +import java.util.Map.Entry; | ||
13 | +import java.util.Set; | ||
14 | + | ||
15 | +public class HttpMethod { | ||
16 | + | ||
17 | + public static String DEFAULT_CHARSET="UTF-8"; | ||
18 | + | ||
19 | + public static String DEFAULT_CONTENT_TYPE="application/json;charset=UTF-8"; | ||
20 | + | ||
21 | + public static String POST="POST"; | ||
22 | + | ||
23 | + public static String GET="GET"; | ||
24 | + | ||
25 | + private static RequestConfig requestConfig; | ||
26 | + | ||
27 | + static{ | ||
28 | + requestConfig = RequestConfig.custom() | ||
29 | + .setSocketTimeout(60*1000) //获取数据的超时时间 | ||
30 | + .setConnectTimeout(60*1000)//建立连接超时时间 | ||
31 | + .setConnectionRequestTimeout(60*1000) //从连接管理器中获取连接超时时间 | ||
32 | + .build(); | ||
33 | + } | ||
34 | + | ||
35 | + /** | ||
36 | + * 组装HTTP GET请求对象 | ||
37 | + * @param requestUrl 请求URL | ||
38 | + * @param headersMap 请求头键值对Map | ||
39 | + * @return {@link org.apache.http.client.methods.HttpGet} | ||
40 | + * @throws URISyntaxException | ||
41 | + */ | ||
42 | + public static HttpGet buildGet(String requestUrl,Map<String,String> headersMap) | ||
43 | + throws URISyntaxException { | ||
44 | + HttpGet get = new HttpGet(requestUrl); | ||
45 | + get.setHeader(HttpHeaders.CONTENT_TYPE,DEFAULT_CONTENT_TYPE); | ||
46 | + //get.setHeader("Connection", "close"); 重用连接,客户端不主动关闭,由调用HttpGet释放连接 | ||
47 | + get.setConfig(requestConfig); | ||
48 | + if(headersMap==null){ | ||
49 | + return get; | ||
50 | + } | ||
51 | + Set<Entry<String,String>> headerEntrySet=headersMap.entrySet(); | ||
52 | + for(Entry<String,String> headerEntry:headerEntrySet){ | ||
53 | + get.setHeader(headerEntry.getKey(), headerEntry.getValue()); | ||
54 | + } | ||
55 | + return get; | ||
56 | + } | ||
57 | + | ||
58 | + /** | ||
59 | + * 组装HTTP POST 请求对象 | ||
60 | + * @param requestUrl 请求URL | ||
61 | + * @param headersMap 请求头键值对Map | ||
62 | + * @param content 提交的内容 | ||
63 | + * @return {@link org.apache.http.client.methods.HttpPost} | ||
64 | + * @throws URISyntaxException | ||
65 | + * @throws UnsupportedEncodingException | ||
66 | + */ | ||
67 | + public static HttpPost buildPost(String requestUrl, | ||
68 | + Map<String,String> headersMap, | ||
69 | + String content) | ||
70 | + throws URISyntaxException, UnsupportedEncodingException { | ||
71 | + HttpPost post = new HttpPost(requestUrl); | ||
72 | + post.setHeader(HttpHeaders.CONTENT_TYPE, DEFAULT_CONTENT_TYPE); | ||
73 | + //post.setHeader("Connection", "close");重用连接,客户端不主动关闭,由调用HttpGet释放连接 | ||
74 | + post.setConfig(requestConfig); | ||
75 | + StringEntity httpEntity = new StringEntity(content,Charset.forName(DEFAULT_CHARSET)); | ||
76 | + post.setEntity(httpEntity); | ||
77 | + if(headersMap==null){ | ||
78 | + return post; | ||
79 | + } | ||
80 | + | ||
81 | + Set<Entry<String,String>> headerEntrySet=headersMap.entrySet(); | ||
82 | + for(Entry<String,String> headerEntry:headerEntrySet){ | ||
83 | + post.setHeader(headerEntry.getKey(), headerEntry.getValue()); | ||
84 | + } | ||
85 | + return post; | ||
86 | + } | ||
87 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpRequester.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpRequester.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import org.apache.commons.lang.StringUtils; | ||
4 | +import org.apache.http.client.ResponseHandler; | ||
5 | +import org.apache.http.client.methods.HttpGet; | ||
6 | +import org.apache.http.client.methods.HttpPost; | ||
7 | +import org.apache.http.impl.client.CloseableHttpClient; | ||
8 | +import org.slf4j.Logger; | ||
9 | +import org.slf4j.LoggerFactory; | ||
10 | + | ||
11 | +import java.util.Map; | ||
12 | + | ||
13 | +public class HttpRequester { | ||
14 | + | ||
15 | + private static final Logger LOGGER = LoggerFactory.getLogger(HttpRequester.class); | ||
16 | + private static HttpClientConnectionPoolManager httpClientManager; | ||
17 | + private static ResponseHandler<HttpResponse> responseHandler; | ||
18 | + | ||
19 | + static{ | ||
20 | + httpClientManager = HttpClientConnectionPoolManager.getInstance(120,30); | ||
21 | + | ||
22 | + //http response处理器 | ||
23 | + responseHandler=new HttpResponseHandler(); | ||
24 | + | ||
25 | + //守护线程,释放过期连接 | ||
26 | + ExpiredConnMonitorThread monitor=new ExpiredConnMonitorThread(httpClientManager,true); | ||
27 | + monitor.start(); | ||
28 | + } | ||
29 | + | ||
30 | + | ||
31 | + /** | ||
32 | + * 发送HTTP或者仅服务端认证HTTPS GET请求 | ||
33 | + * @param requestUrl GET请求URL | ||
34 | + * @param headersMap 请求头键值对map | ||
35 | + * @return {@link HttpResponse} | ||
36 | + * @throws Exception | ||
37 | + */ | ||
38 | + public static HttpResponse sendGet(String requestUrl, Map<String, String> headersMap) throws Exception { | ||
39 | + HttpResponse httpResponse=null; | ||
40 | + HttpGet get=null; | ||
41 | + try{ | ||
42 | + CloseableHttpClient httpClient = null; | ||
43 | + if (StringUtils.containsIgnoreCase(requestUrl, "https")) { | ||
44 | + httpClient =httpClientManager.getCommonHttpsClient(); | ||
45 | + } else { | ||
46 | + httpClient =httpClientManager.getHttpClient(); | ||
47 | + } | ||
48 | + get=HttpMethod.buildGet(requestUrl, headersMap); | ||
49 | + Long startTime=System.currentTimeMillis(); | ||
50 | + httpResponse=httpClient.execute(get,responseHandler); | ||
51 | + LOGGER.info("http请求用时["+(System.currentTimeMillis()-startTime)+"ms]"); | ||
52 | + }catch(Exception e){ | ||
53 | + throw e; | ||
54 | + }finally{ | ||
55 | + releaseGetConnection(get); | ||
56 | + } | ||
57 | + return httpResponse; | ||
58 | + } | ||
59 | + | ||
60 | + /** | ||
61 | + * 发送双向认证 HTTPS GET请求 | ||
62 | + * @param certStoreType 证书库类型 | ||
63 | + * @param certStorePath 证书库位置 | ||
64 | + * @param certStorePassword 证书库密码 | ||
65 | + * @param requestUrl 请求URL | ||
66 | + * @param headersMap 请求头键值对map | ||
67 | + * @return {@link HttpResponse} | ||
68 | + * @throws Exception | ||
69 | + */ | ||
70 | + public static HttpResponse sendGet(String certStoreType, String certStorePath, String certStorePassword, String requestUrl, Map<String, String> headersMap) throws Exception { | ||
71 | + HttpResponse httpResponse=null; | ||
72 | + HttpGet get=null; | ||
73 | + try{ | ||
74 | + CloseableHttpClient httpClient = null; | ||
75 | + if (StringUtils.containsIgnoreCase(requestUrl, "https")) { | ||
76 | + httpClient = httpClientManager.getStrictHttpsClient(certStoreType, certStorePath, certStorePassword); | ||
77 | + } else { | ||
78 | + httpClient = httpClientManager.getHttpClient(); | ||
79 | + } | ||
80 | + get=HttpMethod.buildGet(requestUrl, headersMap); | ||
81 | + Long startTime=System.currentTimeMillis(); | ||
82 | + httpResponse=httpClient.execute(get,responseHandler); | ||
83 | + LOGGER.info("http请求用时["+(System.currentTimeMillis()-startTime)+"ms]"); | ||
84 | + }catch(Exception e){ | ||
85 | + throw e; | ||
86 | + }finally{ | ||
87 | + releaseGetConnection(get); | ||
88 | + } | ||
89 | + return httpResponse; | ||
90 | + } | ||
91 | + | ||
92 | + /** | ||
93 | + * 发送HTTP或者仅服务端认证HTTPS POST请求 | ||
94 | + * @param requestUrl POST请求URL | ||
95 | + * @param headersMap 请求头键值对map | ||
96 | + * @param content POST到服务端的内容 | ||
97 | + * @return {@link HttpResponse} | ||
98 | + * @throws Exception | ||
99 | + */ | ||
100 | + public static HttpResponse sendPost(String requestUrl, Map<String, String> headersMap, String content) throws Exception { | ||
101 | + HttpResponse httpResponse=null; | ||
102 | + HttpPost post=null; | ||
103 | + try{ | ||
104 | + CloseableHttpClient httpClient = null; | ||
105 | + if (StringUtils.containsIgnoreCase(requestUrl, "https")) { | ||
106 | + httpClient = httpClientManager.getCommonHttpsClient(); | ||
107 | + } else { | ||
108 | + httpClient = httpClientManager.getHttpClient(); | ||
109 | + } | ||
110 | + post=HttpMethod.buildPost(requestUrl, headersMap, content); | ||
111 | + Long startTime=System.currentTimeMillis(); | ||
112 | + httpResponse=httpClient.execute(post,responseHandler); | ||
113 | + LOGGER.info("http请求用时["+(System.currentTimeMillis()-startTime)+"ms]"); | ||
114 | + }catch(Exception e){ | ||
115 | + throw e; | ||
116 | + }finally{ | ||
117 | + releasePostConnection(post); | ||
118 | + } | ||
119 | + return httpResponse; | ||
120 | + } | ||
121 | + | ||
122 | + /** | ||
123 | + * 发送双向认证 HTTPS GET请求 | ||
124 | + * @param certStoreType 证书库类型 | ||
125 | + * @param certStorePath 证书库位置 | ||
126 | + * @param certStorePassword 证书库密码 | ||
127 | + * @param requestUrl 请求URL | ||
128 | + * @param headersMap 请求头键值对map | ||
129 | + * @param content POST到服务端的内容 | ||
130 | + * @return {@link HttpResponse} | ||
131 | + * @throws Exception | ||
132 | + */ | ||
133 | + public static HttpResponse sendPost(String certStoreType, String certStorePath, String certStorePassword, String requestUrl, Map<String, String> headersMap, String content) throws Exception { | ||
134 | + HttpResponse httpResponse=null; | ||
135 | + HttpPost post=null; | ||
136 | + try{ | ||
137 | + CloseableHttpClient httpClient = null; | ||
138 | + if (StringUtils.containsIgnoreCase(requestUrl, "https")) { | ||
139 | + httpClient = httpClientManager.getStrictHttpsClient(certStoreType, certStorePath, certStorePassword); | ||
140 | + } else { | ||
141 | + httpClient = httpClientManager.getHttpClient(); | ||
142 | + } | ||
143 | + post=HttpMethod.buildPost(requestUrl, headersMap, content); | ||
144 | + Long startTime=System.currentTimeMillis(); | ||
145 | + httpResponse=httpClient.execute(post,responseHandler); | ||
146 | + LOGGER.info("http请求用时["+(System.currentTimeMillis()-startTime)+"ms]"); | ||
147 | + }catch(Exception e){ | ||
148 | + throw e; | ||
149 | + }finally{ | ||
150 | + releasePostConnection(post); | ||
151 | + } | ||
152 | + return httpResponse; | ||
153 | + } | ||
154 | + | ||
155 | + private static void releasePostConnection(HttpPost post){ | ||
156 | + if(post!=null){ | ||
157 | + post.releaseConnection(); | ||
158 | + } | ||
159 | + } | ||
160 | + | ||
161 | + private static void releaseGetConnection(HttpGet get){ | ||
162 | + if(get!=null){ | ||
163 | + get.releaseConnection(); | ||
164 | + } | ||
165 | + } | ||
166 | + | ||
167 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpResponse.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpResponse.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common.http; | ||
6 | + | ||
7 | +import java.util.Map; | ||
8 | + | ||
9 | +/** | ||
10 | + * HTTP回应对象 | ||
11 | + * @author dev-center | ||
12 | + * @since 2014-11-05 | ||
13 | + */ | ||
14 | +public class HttpResponse { | ||
15 | + | ||
16 | + int statusCode; | ||
17 | + | ||
18 | + Map<String,String> headersMap; | ||
19 | + | ||
20 | + Map<String,String> cookiesMap; | ||
21 | + | ||
22 | + String body; | ||
23 | + | ||
24 | + | ||
25 | + public int getStatusCode() { | ||
26 | + return statusCode; | ||
27 | + } | ||
28 | + | ||
29 | + | ||
30 | + public void setStatusCode(int statusCode) { | ||
31 | + this.statusCode = statusCode; | ||
32 | + } | ||
33 | + | ||
34 | + | ||
35 | + public Map<String, String> getHeadersMap() { | ||
36 | + return headersMap; | ||
37 | + } | ||
38 | + | ||
39 | + | ||
40 | + public void setHeadersMap(Map<String, String> headersMap) { | ||
41 | + this.headersMap = headersMap; | ||
42 | + } | ||
43 | + | ||
44 | + | ||
45 | + public String getBody() { | ||
46 | + return body; | ||
47 | + } | ||
48 | + | ||
49 | + | ||
50 | + public void setBody(String body) { | ||
51 | + this.body = body; | ||
52 | + } | ||
53 | + | ||
54 | + | ||
55 | + | ||
56 | + public Map<String, String> getCookiesMap() { | ||
57 | + return cookiesMap; | ||
58 | + } | ||
59 | + | ||
60 | + | ||
61 | + | ||
62 | + public void setCookiesMap(Map<String, String> cookiesMap) { | ||
63 | + this.cookiesMap = cookiesMap; | ||
64 | + } | ||
65 | +} | ||
0 | \ No newline at end of file | 66 | \ No newline at end of file |
dtms-client/src/main/java/com/b2c/dtms/common/http/HttpResponseHandler.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/HttpResponseHandler.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import org.apache.commons.lang.StringUtils; | ||
4 | +import org.apache.http.Header; | ||
5 | +import org.apache.http.client.ClientProtocolException; | ||
6 | +import org.apache.http.client.ResponseHandler; | ||
7 | +import org.apache.http.util.EntityUtils; | ||
8 | + | ||
9 | +import java.io.IOException; | ||
10 | +import java.util.HashMap; | ||
11 | +import java.util.Map; | ||
12 | + | ||
13 | +/** | ||
14 | + * http response处理器<p> | ||
15 | + * 接口中有handleResponse(HttpResponse response)方法。使用这个方法,用户完全不用关心http连接管理器。 | ||
16 | + * 当使用ResponseHandler时,HttpClient会自动地将Http连接释放给Http管理器,即使http请求失败了或者抛出了异常。 | ||
17 | + */ | ||
18 | +public class HttpResponseHandler implements ResponseHandler<HttpResponse> { | ||
19 | + | ||
20 | + @Override | ||
21 | + public HttpResponse handleResponse(org.apache.http.HttpResponse response) | ||
22 | + throws ClientProtocolException, IOException { | ||
23 | + HttpResponse hr = new HttpResponse(); | ||
24 | + try { | ||
25 | + hr.setStatusCode(response.getStatusLine().getStatusCode()); | ||
26 | + hr.setBody(EntityUtils.toString(response.getEntity())); | ||
27 | + hr.setHeadersMap(resolveResponseHeader(response.getAllHeaders())); | ||
28 | + hr.setCookiesMap(resolveResponseCookie(response.getAllHeaders())); | ||
29 | + } catch (IllegalStateException e) { | ||
30 | + throw e; | ||
31 | + } catch (Exception e) { | ||
32 | + throw new RuntimeException(e); | ||
33 | + } | ||
34 | + return hr; | ||
35 | + } | ||
36 | + | ||
37 | + /** | ||
38 | + * 解析返回消息头 | ||
39 | + * @param headers {@link org.apache.http.Header} 键值对Hader对象 | ||
40 | + * @return 键值对消息头Map | ||
41 | + */ | ||
42 | + private static Map<String, String> resolveResponseHeader(Header[] headers) { | ||
43 | + if (headers == null || headers.length == 0) { | ||
44 | + return null; | ||
45 | + } | ||
46 | + Map<String, String> headersMap = new HashMap<String, String>(); | ||
47 | + for (Header header : headers) { | ||
48 | + // Cookie头放在Cookie中resolveResponseCookie解析 | ||
49 | + if (StringUtils.equalsIgnoreCase(HttpHeaders.SET_COOKIE, header.getName())) { | ||
50 | + continue; | ||
51 | + } | ||
52 | + headersMap.put(StringUtils.trim(header.getName()), StringUtils.trim(header.getValue())); | ||
53 | + } | ||
54 | + return headersMap; | ||
55 | + } | ||
56 | + | ||
57 | + /** | ||
58 | + * 解析返回消息头中的cookie | ||
59 | + * @param headers {@link org.apache.http.Header} 键值对Hader对象 | ||
60 | + * @return 键值对消息头Map | ||
61 | + */ | ||
62 | + private static Map<String, String> resolveResponseCookie(Header[] headers) { | ||
63 | + if (headers == null || headers.length == 0) { | ||
64 | + return null; | ||
65 | + } | ||
66 | + Map<String, String> cookiesMap = new HashMap<String, String>(); | ||
67 | + for (Header header : headers) { | ||
68 | + // Cookie | ||
69 | + if (StringUtils.equalsIgnoreCase(HttpHeaders.SET_COOKIE, header.getName()) && StringUtils.isNotBlank(header.getValue())) { | ||
70 | + String[] cookieItemArray = header.getValue().split(";"); | ||
71 | + if(cookieItemArray==null || cookieItemArray.length==0){ | ||
72 | + continue; | ||
73 | + } | ||
74 | + for (String cookieItem : cookieItemArray) { | ||
75 | + if (StringUtils.isBlank(cookieItem)) { | ||
76 | + continue; | ||
77 | + } | ||
78 | + String[] cookieItemValueArray = cookieItem.split("="); | ||
79 | + if(cookieItemValueArray==null || cookieItemValueArray.length==0 ||cookieItemValueArray.length==1){ | ||
80 | + continue; | ||
81 | + } | ||
82 | + cookiesMap.put(StringUtils.trim(cookieItemValueArray[0]), StringUtils.trim(cookieItemValueArray[1])); | ||
83 | + } | ||
84 | + break; | ||
85 | + } | ||
86 | + } | ||
87 | + return cookiesMap; | ||
88 | + } | ||
89 | + | ||
90 | +} |
dtms-client/src/main/java/com/b2c/dtms/common/http/TrustAllCertManager.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/common/http/TrustAllCertManager.java | ||
1 | +package com.b2c.dtms.common.http; | ||
2 | + | ||
3 | +import javax.net.ssl.X509TrustManager; | ||
4 | +import java.security.cert.CertificateException; | ||
5 | +import java.security.cert.X509Certificate; | ||
6 | + | ||
7 | + | ||
8 | +public class TrustAllCertManager implements X509TrustManager { | ||
9 | + | ||
10 | + @Override | ||
11 | + public void checkClientTrusted(X509Certificate[] chain, String authType) | ||
12 | + throws CertificateException { | ||
13 | + // 忽略,信任所有 | ||
14 | + } | ||
15 | + | ||
16 | + @Override | ||
17 | + public void checkServerTrusted(X509Certificate[] chain, String authType) | ||
18 | + throws CertificateException { | ||
19 | + // 忽略,信任所有 | ||
20 | + } | ||
21 | + | ||
22 | + @Override | ||
23 | + public X509Certificate[] getAcceptedIssuers() { | ||
24 | + // 忽略,信任所有 | ||
25 | + return null; | ||
26 | + } | ||
27 | + | ||
28 | +} |
dtms-client/src/main/java/com/b2c/dtms/domain/DtmsCallBackReturn.java
0 → 100644
1 | +++ a/dtms-client/src/main/java/com/b2c/dtms/domain/DtmsCallBackReturn.java | ||
1 | +package com.b2c.dtms.domain; | ||
2 | + | ||
3 | + | ||
4 | +public class DtmsCallBackReturn { | ||
5 | + | ||
6 | + private String code; | ||
7 | + | ||
8 | + private String message; | ||
9 | + | ||
10 | + | ||
11 | + public String getCode() { | ||
12 | + return code; | ||
13 | + } | ||
14 | + | ||
15 | + public void setCode(String code) { | ||
16 | + this.code = code; | ||
17 | + } | ||
18 | + | ||
19 | + | ||
20 | + public String getMessage() { | ||
21 | + return message; | ||
22 | + } | ||
23 | + | ||
24 | + | ||
25 | + public void setMessage(String message) { | ||
26 | + this.message = message; | ||
27 | + } | ||
28 | + | ||
29 | + @Override | ||
30 | + public String toString() { | ||
31 | + return "[code=" + code + ", message=" + message | ||
32 | + + "]"; | ||
33 | + } | ||
34 | +} |
dtms-client/src/test/java/com/b2c/dtms/client/DtmsClientTestCase.java
0 → 100644
1 | +++ a/dtms-client/src/test/java/com/b2c/dtms/client/DtmsClientTestCase.java | ||
1 | +package com.b2c.dtms.client; | ||
2 | + | ||
3 | +import org.junit.Test; | ||
4 | + | ||
5 | +import com.b2c.dtms.client.domain.dto.request.DtmsProduceRequestDto; | ||
6 | +import com.b2c.dtms.client.domain.dto.response.DtmsResponseDto; | ||
7 | +import com.b2c.dtms.common.enums.dtms.DtmsMessageType; | ||
8 | + | ||
9 | +public class DtmsClientTestCase { | ||
10 | + | ||
11 | + @Test | ||
12 | + public void test() { | ||
13 | + DtmsClient client = new DtmsClient(); | ||
14 | + DtmsProduceRequestDto message = new DtmsProduceRequestDto(); | ||
15 | + message.setBizId("123456"); | ||
16 | + message.setCallUrl("http://orders.zandeapp.com"); | ||
17 | + message.setContent("abcdefg"); | ||
18 | + message.setDelaySeconds(10); | ||
19 | + message.setType(DtmsMessageType.Timer.code()); | ||
20 | + DtmsResponseDto response = client.produceMessage(message); | ||
21 | + System.out.println(response); | ||
22 | + } | ||
23 | + | ||
24 | +} |
dtms-dao/pom.xml
0 → 100644
1 | +++ a/dtms-dao/pom.xml | ||
1 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
2 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
3 | + <modelVersion>4.0.0</modelVersion> | ||
4 | + <parent> | ||
5 | + <groupId>com.b2c.dtms</groupId> | ||
6 | + <artifactId>dtms-parent</artifactId> | ||
7 | + <version>0.0.1-SNAPSHOT</version> | ||
8 | + </parent> | ||
9 | + <artifactId>dtms-dao</artifactId> | ||
10 | + | ||
11 | + <dependencies> | ||
12 | + <dependency> | ||
13 | + <groupId>${project.groupId}</groupId> | ||
14 | + <artifactId>dtms-domain</artifactId> | ||
15 | + <version>${project.version}</version> | ||
16 | + </dependency> | ||
17 | + <dependency> | ||
18 | + <groupId>org.mybatis</groupId> | ||
19 | + <artifactId>mybatis</artifactId> | ||
20 | + </dependency> | ||
21 | + <dependency> | ||
22 | + <groupId>org.mybatis</groupId> | ||
23 | + <artifactId>mybatis-spring</artifactId> | ||
24 | + </dependency> | ||
25 | + <dependency> | ||
26 | + <groupId>com.alibaba</groupId> | ||
27 | + <artifactId>druid</artifactId> | ||
28 | + </dependency> | ||
29 | + <!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --> | ||
30 | + <!-- <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> | ||
31 | + </dependency> --> | ||
32 | + <dependency> | ||
33 | + <groupId>mysql</groupId> | ||
34 | + <artifactId>mysql-connector-java</artifactId> | ||
35 | + </dependency> | ||
36 | + <dependency> | ||
37 | + <groupId>org.springframework</groupId> | ||
38 | + <artifactId>spring-jdbc</artifactId> | ||
39 | + </dependency> | ||
40 | + <dependency> | ||
41 | + <groupId>org.aspectj</groupId> | ||
42 | + <artifactId>aspectjweaver</artifactId> | ||
43 | + </dependency> | ||
44 | + </dependencies> | ||
45 | +</project> | ||
0 | \ No newline at end of file | 46 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/DtmsMaxidDao.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/DtmsMaxidDao.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao; | ||
6 | + | ||
7 | +import java.util.concurrent.atomic.AtomicLong; | ||
8 | + | ||
9 | +import com.b2c.dtms.dao.base.BaseDao; | ||
10 | +import com.b2c.dtms.domain.OrderMaxid; | ||
11 | + | ||
12 | +/** | ||
13 | + * OrderMaxidDao 接口 | ||
14 | + * @author dev-center | ||
15 | + * @since 2014-05-19 | ||
16 | + */ | ||
17 | +public interface DtmsMaxidDao extends BaseDao<OrderMaxid,Long>{ | ||
18 | + //自定义扩展 | ||
19 | + public OrderMaxid getOrderMaxIdByIdType(String idType); | ||
20 | + | ||
21 | + /** | ||
22 | + * 在一个独立新事务中更新 | ||
23 | + * @param t | ||
24 | + * @return | ||
25 | + */ | ||
26 | + public SequenceNo getSeqNoByNewTransactional(SequenceNo idSequence,String seqIdKey,Long startSeq); | ||
27 | + | ||
28 | + /** | ||
29 | + * Sequence本地缓存对象 <br /> | ||
30 | + * <B>Copyright</B> Copyright (c) 2014 www.diligrp.com All rights reserved. <br /> | ||
31 | + * 本软件源代码版权归地利集团,未经许可不得任意复制与传播.<br /> | ||
32 | + * <B>Company</B> 地利集团 | ||
33 | + */ | ||
34 | + public class SequenceNo{ | ||
35 | + private Long step =50L;//步长 | ||
36 | + private AtomicLong startSeq =new AtomicLong(1);//开始ID | ||
37 | + private Long finishSeq =0L;//结束ID | ||
38 | + public Long next(){ | ||
39 | + return startSeq.getAndIncrement(); | ||
40 | + } | ||
41 | + public Long getStep() { | ||
42 | + return step; | ||
43 | + } | ||
44 | + public Long getStartSeq() { | ||
45 | + return startSeq.get(); | ||
46 | + } | ||
47 | + | ||
48 | + public void setStartSeq(Long startSeq) { | ||
49 | + this.startSeq = new AtomicLong(startSeq); | ||
50 | + } | ||
51 | + | ||
52 | + public Long getFinishSeq() { | ||
53 | + return finishSeq; | ||
54 | + } | ||
55 | + | ||
56 | + public void setFinishSeq(Long finishSeq) { | ||
57 | + this.finishSeq = finishSeq; | ||
58 | + } | ||
59 | + } | ||
60 | +} | ||
0 | \ No newline at end of file | 61 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/base/BaseDao.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/base/BaseDao.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.base; | ||
6 | + | ||
7 | +import java.io.Serializable; | ||
8 | +import java.util.List; | ||
9 | + | ||
10 | +/** | ||
11 | + * dao基类<实体,主键> | ||
12 | + * @author dev-center | ||
13 | + * @since 2014-05-15 | ||
14 | + * @param <T> 实体 | ||
15 | + * @param <KEY> 主键 | ||
16 | + */ | ||
17 | +public interface BaseDao<T,KEY extends Serializable> { | ||
18 | + | ||
19 | + /** | ||
20 | + * 添加对象 | ||
21 | + * @param t | ||
22 | + * @return 影响条数 | ||
23 | + */ | ||
24 | + @SuppressWarnings("unchecked") | ||
25 | + int insertEntry(T...t); | ||
26 | + | ||
27 | +// /** | ||
28 | +// * 添加对象并设置ID到对象上(需开启事务) | ||
29 | +// * @param t | ||
30 | +// * @return 影响条数 | ||
31 | +// */ | ||
32 | +// int insertEntryCreateId(T t); | ||
33 | + | ||
34 | + /** | ||
35 | + * 删除对象,主键 | ||
36 | + * @param key | ||
37 | + * @return 影响条数 | ||
38 | + */ | ||
39 | + @SuppressWarnings("unchecked") | ||
40 | + int deleteByKey(KEY...key); | ||
41 | + | ||
42 | + /** | ||
43 | + * 删除对象,条件 | ||
44 | + * @param condtion | ||
45 | + * @return 影响条数 | ||
46 | + */ | ||
47 | + int deleteByKey(T condtion); | ||
48 | + | ||
49 | + /** | ||
50 | + * 更新对象,条件主键ID | ||
51 | + * @param t | ||
52 | + * @return 影响条数 | ||
53 | + */ | ||
54 | + int updateByKey(T t); | ||
55 | + | ||
56 | + /** | ||
57 | + * 查询对象,条件主键 | ||
58 | + * @param key | ||
59 | + * @return | ||
60 | + */ | ||
61 | + T selectEntry(KEY key); | ||
62 | + | ||
63 | + /** | ||
64 | + * 查询对象,条件主键数组 | ||
65 | + * @param key | ||
66 | + * @return | ||
67 | + */ | ||
68 | + @SuppressWarnings("unchecked") | ||
69 | + List<T> selectEntryList(KEY...key); | ||
70 | + | ||
71 | + /** | ||
72 | + * 查询对象,只要不为NULL与空则为条件 | ||
73 | + * @param t | ||
74 | + * @return | ||
75 | + */ | ||
76 | + List<T> selectEntryList(T t); | ||
77 | + | ||
78 | + /** | ||
79 | + * 查询对象总数 | ||
80 | + * @param t | ||
81 | + * @return | ||
82 | + */ | ||
83 | + Integer selectEntryListCount(T t); | ||
84 | + | ||
85 | + /** | ||
86 | + * 批量更新 | ||
87 | + * @param t | ||
88 | + * @return | ||
89 | + */ | ||
90 | + int updateBatch(List<T> t); | ||
91 | + | ||
92 | + /** | ||
93 | + * 批量更新 | ||
94 | + * @param t | ||
95 | + * @return | ||
96 | + */ | ||
97 | + @SuppressWarnings("unchecked") | ||
98 | + int updateBatch(T ... t); | ||
99 | + | ||
100 | + | ||
101 | + /** | ||
102 | + * 批量插入 | ||
103 | + * @param t | ||
104 | + * @return | ||
105 | + */ | ||
106 | + int insertBatch(List<T> t); | ||
107 | + | ||
108 | + /** | ||
109 | + * 批量插入 | ||
110 | + * @param t | ||
111 | + * @return | ||
112 | + */ | ||
113 | + @SuppressWarnings("unchecked") | ||
114 | + int insertBatch(T ... t); | ||
115 | +} |
dtms-dao/src/main/java/com/b2c/dtms/dao/base/BaseDaoImpl.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/base/BaseDaoImpl.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.base; | ||
6 | + | ||
7 | +import java.io.Serializable; | ||
8 | +import java.util.List; | ||
9 | + | ||
10 | +/** | ||
11 | + * dao实现类 | ||
12 | + * @author dev-center | ||
13 | + * @since 2014-05-15 | ||
14 | + * @param <T> 实体 | ||
15 | + * @param <KEY> 主键 | ||
16 | + */ | ||
17 | +public abstract class BaseDaoImpl<T, KEY extends Serializable> extends MyBatisSupport implements BaseDao<T, KEY> { | ||
18 | + private static final String DEFAULT_INSERT_KEY = "insertEntry"; | ||
19 | + //private static final String DEFAULT_INSERT_LAST_SEQUENCE_KEY = "lastSequence"; | ||
20 | + private static final String DEFAULT_DELETE_ARRAY_KEY = "deleteByArrayKey"; | ||
21 | + private static final String DEFAULT_DELETE_CONDTION = "deleteByCondtion"; | ||
22 | + private static final String DEFAULT_UPDATE_KEY = "updateByKey"; | ||
23 | + private static final String DEFAULT_SELECT_ARRAY_KEY = "selectEntryArray"; | ||
24 | + private static final String DEFAULT_SELECT_CONDTION = "selectEntryList"; | ||
25 | + private static final String DEFAULT_SELECT_CONDTION_COUNT = "selectEntryListCount"; | ||
26 | + | ||
27 | + /** | ||
28 | + * 获取命名空前前缀 | ||
29 | + * @param statement | ||
30 | + * @return | ||
31 | + */ | ||
32 | + public abstract String getNameSpace(String statement); | ||
33 | + | ||
34 | + @SuppressWarnings("unchecked") | ||
35 | + public int insertEntry(T...t){ | ||
36 | + int result = 0; | ||
37 | + if (t == null || t.length <= 0) {return result;} | ||
38 | + for (T o : t) { | ||
39 | + if(o != null) { | ||
40 | + result += this.insert(getNameSpace(DEFAULT_INSERT_KEY), o); | ||
41 | + } | ||
42 | + } | ||
43 | + return result; | ||
44 | + } | ||
45 | + | ||
46 | +// public int insertEntryCreateId(T t) { | ||
47 | +// @SuppressWarnings("unchecked") | ||
48 | +// int result = this.insertEntry(t); | ||
49 | +// if (result > 0) { | ||
50 | +// Integer id = (Integer)select(getNameSpace(DEFAULT_INSERT_LAST_SEQUENCE_KEY),null); | ||
51 | +// if (id != null && id >0) { | ||
52 | +// try { | ||
53 | +// Class<?> clz = t.getClass(); | ||
54 | +// clz.getMethod("setId", Long.class).invoke(t, id.longValue());//最后一次插入编号 | ||
55 | +// } catch (Exception e) { | ||
56 | +// throw new AppException("设置新增主键失败", e); | ||
57 | +// } | ||
58 | +// } | ||
59 | +// } | ||
60 | +// return result; | ||
61 | +// } | ||
62 | + | ||
63 | + @SuppressWarnings("unchecked") | ||
64 | + public int deleteByKey(KEY...key) { | ||
65 | + return this.delete(getNameSpace(DEFAULT_DELETE_ARRAY_KEY), key); | ||
66 | + } | ||
67 | + | ||
68 | + public int deleteByKey(T t) { | ||
69 | + return this.delete(getNameSpace(DEFAULT_DELETE_CONDTION), t); | ||
70 | + } | ||
71 | + | ||
72 | + public int updateByKey(T t) { | ||
73 | + return this.update(getNameSpace(DEFAULT_UPDATE_KEY), t); | ||
74 | + } | ||
75 | + | ||
76 | + public int updateBatch(List<T> t) { | ||
77 | + return this.updateBatch(getNameSpace(DEFAULT_UPDATE_KEY),t); | ||
78 | + } | ||
79 | + | ||
80 | + | ||
81 | + @SuppressWarnings("unchecked") | ||
82 | + public int updateBatch(T ... t) { | ||
83 | + return this.updateBatch(getNameSpace(DEFAULT_UPDATE_KEY), t); | ||
84 | + } | ||
85 | + | ||
86 | + public int insertBatch(List<T> t) { | ||
87 | + return this.insertBatch(getNameSpace(DEFAULT_INSERT_KEY),t); | ||
88 | + } | ||
89 | + | ||
90 | + @SuppressWarnings("unchecked") | ||
91 | + public int insertBatch(T ... t) { | ||
92 | + return this.insertBatch(getNameSpace(DEFAULT_INSERT_KEY),t); | ||
93 | + } | ||
94 | + | ||
95 | + public T selectEntry(KEY key) { | ||
96 | + @SuppressWarnings("unchecked") | ||
97 | + List<T> list = this.selectEntryList(key); | ||
98 | + if(list != null && list.size() > 0) { | ||
99 | + return list.get(0); | ||
100 | + } | ||
101 | + return null; | ||
102 | + } | ||
103 | + | ||
104 | + @SuppressWarnings("unchecked") | ||
105 | + public List<T> selectEntryList(KEY...key) { | ||
106 | + if (key == null || key.length <= 0) {return null;} | ||
107 | + return this.selectList(getNameSpace(DEFAULT_SELECT_ARRAY_KEY), key); | ||
108 | + } | ||
109 | + | ||
110 | + public List<T> selectEntryList(T t) { | ||
111 | + return this.selectList(getNameSpace(DEFAULT_SELECT_CONDTION), t); | ||
112 | + } | ||
113 | + | ||
114 | + public Integer selectEntryListCount(T t) { | ||
115 | + return this.select(getNameSpace(DEFAULT_SELECT_CONDTION_COUNT), t); | ||
116 | + } | ||
117 | +} |
dtms-dao/src/main/java/com/b2c/dtms/dao/base/MyBatisSupport.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/base/MyBatisSupport.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.base; | ||
6 | + | ||
7 | +import org.apache.ibatis.session.SqlSession; | ||
8 | +import org.mybatis.spring.SqlSessionTemplate; | ||
9 | +import org.slf4j.Logger; | ||
10 | +import org.slf4j.LoggerFactory; | ||
11 | + | ||
12 | +import com.b2c.dtms.common.exception.AppException; | ||
13 | + | ||
14 | +import javax.annotation.Resource; | ||
15 | +import java.util.List; | ||
16 | +import java.util.Map; | ||
17 | + | ||
18 | +/** | ||
19 | + * 对mybatis的支持<br/> | ||
20 | + * spring配置文件需定义sqlTemplate与batchSqlTemplate | ||
21 | + * @author dev-center | ||
22 | + * @since 2014-05-15 | ||
23 | + */ | ||
24 | +abstract class MyBatisSupport { | ||
25 | + protected static final Logger LOGGER = LoggerFactory.getLogger(MyBatisSupport.class); | ||
26 | + @Resource private SqlSessionTemplate sqlTemplate; | ||
27 | + @Resource private SqlSessionTemplate batchSqlTemplate; | ||
28 | + | ||
29 | + /** | ||
30 | + * SqlSessionTemplate | ||
31 | + * @param batch 是否批处理 | ||
32 | + * @param readonly 是否只读 | ||
33 | + * @return | ||
34 | + */ | ||
35 | + protected SqlSessionTemplate getSqlTemplate(boolean batch,boolean readonly) { | ||
36 | + | ||
37 | + if(readonly) { | ||
38 | + } | ||
39 | + | ||
40 | + if(batch) { | ||
41 | + return batchSqlTemplate; | ||
42 | + } | ||
43 | + return sqlTemplate; | ||
44 | + } | ||
45 | + | ||
46 | + /** | ||
47 | + * 新增对象 | ||
48 | + * @param statement | ||
49 | + * @param parameter | ||
50 | + * @return | ||
51 | + */ | ||
52 | + protected int insert(String statement,Object parameter){ | ||
53 | + int res = 0; | ||
54 | + try { | ||
55 | + if(parameter != null) { | ||
56 | + res = getSqlTemplate(false,false).insert(statement, parameter); | ||
57 | + } | ||
58 | + } catch (Exception ex) { | ||
59 | + throw new AppException("Mybatis执行新增异常", ex); | ||
60 | + } | ||
61 | + return res; | ||
62 | + } | ||
63 | + | ||
64 | + /** | ||
65 | + * 删除对象 | ||
66 | + * @param statement | ||
67 | + * @param parameter | ||
68 | + * @return | ||
69 | + */ | ||
70 | + protected int delete(String statement,Object parameter){ | ||
71 | + int res = 0; | ||
72 | + try { | ||
73 | + res = getSqlTemplate(false,false).delete(statement, parameter); | ||
74 | + } catch (Exception ex) { | ||
75 | + throw new AppException("Mybatis执行删除异常", ex); | ||
76 | + } | ||
77 | + return res; | ||
78 | + } | ||
79 | + | ||
80 | + /** | ||
81 | + * 更新对象 | ||
82 | + * @param statement | ||
83 | + * @param parameter | ||
84 | + * @return | ||
85 | + */ | ||
86 | + protected int update(String statement,Object parameter){ | ||
87 | + int res = 0; | ||
88 | + try { | ||
89 | + if(parameter != null) { | ||
90 | + res = getSqlTemplate(false,false).update(statement, parameter); | ||
91 | + } | ||
92 | + } catch (Exception ex) { | ||
93 | + throw new AppException("Mybatis执行更新异常", ex); | ||
94 | + } | ||
95 | + return res; | ||
96 | + } | ||
97 | + | ||
98 | + /** | ||
99 | + * 批量更新对象 | ||
100 | + * @param statement | ||
101 | + * @param list | ||
102 | + * @return | ||
103 | + */ | ||
104 | + @SuppressWarnings("rawtypes") | ||
105 | + protected int updateBatch(String statement,List parameterList){ | ||
106 | + int res = 0; | ||
107 | + SqlSession session=null; | ||
108 | + try { | ||
109 | + if(parameterList!=null&¶meterList.size()>0){ | ||
110 | + session= getSqlTemplate(true,false).getSqlSessionFactory().openSession(); | ||
111 | + for(int i=0;i<parameterList.size();i++){ | ||
112 | + int row=session.update(statement, parameterList.get(i)); | ||
113 | + res+=row; | ||
114 | + } | ||
115 | + session.flushStatements(); | ||
116 | + session.commit(); | ||
117 | + } | ||
118 | + } catch (Exception ex) { | ||
119 | + //回滚由外层服务决定 | ||
120 | + throw new AppException("Mybatis执行批量更新异常", ex); | ||
121 | + } finally{ | ||
122 | + if(session!=null){ | ||
123 | + session.close(); | ||
124 | + } | ||
125 | + } | ||
126 | + return res; | ||
127 | + } | ||
128 | + | ||
129 | + /** | ||
130 | + * 批量更新对象 | ||
131 | + * @param statement | ||
132 | + * @param list | ||
133 | + * @return | ||
134 | + */ | ||
135 | + protected int updateBatch(String statement,Object ... parameterArray){ | ||
136 | + int res = 0; | ||
137 | + SqlSession session=null; | ||
138 | + try { | ||
139 | + if(parameterArray!=null&¶meterArray.length>0){ | ||
140 | + session= getSqlTemplate(true,false).getSqlSessionFactory().openSession(); | ||
141 | + for(int i=0;i<parameterArray.length;i++){ | ||
142 | + int row=session.update(statement, parameterArray[i]); | ||
143 | + res+=row; | ||
144 | + } | ||
145 | + session.flushStatements(); | ||
146 | + session.commit(); | ||
147 | + } | ||
148 | + } catch (Exception ex) { | ||
149 | + //回滚由外层服务决定 | ||
150 | + throw new AppException("Mybatis执行批量更新异常", ex); | ||
151 | + } finally{ | ||
152 | + if(session!=null){ | ||
153 | + session.close(); | ||
154 | + } | ||
155 | + } | ||
156 | + return res; | ||
157 | + } | ||
158 | + | ||
159 | + /** | ||
160 | + * | ||
161 | + * 批量插入对象 | ||
162 | + * @param statement | ||
163 | + * @param parameterList | ||
164 | + * @return | ||
165 | + */ | ||
166 | + @SuppressWarnings("rawtypes") | ||
167 | + protected int insertBatch(String statement,List parameterList){ | ||
168 | + int res = 0; | ||
169 | + SqlSession session=null; | ||
170 | + try { | ||
171 | + if(parameterList!=null&¶meterList.size()>0){ | ||
172 | + session= getSqlTemplate(true,false).getSqlSessionFactory().openSession(); | ||
173 | + for(int i=0;i<parameterList.size();i++){ | ||
174 | + int row=session.insert(statement, parameterList.get(i)); | ||
175 | + res+=row; | ||
176 | + } | ||
177 | + session.flushStatements(); | ||
178 | + session.commit(); | ||
179 | + } | ||
180 | + } catch (Exception ex) { | ||
181 | + //回滚由外层服务决定 | ||
182 | + throw new AppException("Mybatis执行批量插入异常", ex); | ||
183 | + } finally{ | ||
184 | + if(session!=null){ | ||
185 | + session.close(); | ||
186 | + } | ||
187 | + } | ||
188 | + return res; | ||
189 | + } | ||
190 | + | ||
191 | + /** | ||
192 | + * 批量更新对象 | ||
193 | + * @param statement | ||
194 | + * @param list | ||
195 | + * @return | ||
196 | + */ | ||
197 | + protected int insertBatch(String statement,Object ... parameterArray){ | ||
198 | + int res = 0; | ||
199 | + SqlSession session=null; | ||
200 | + try { | ||
201 | + if(parameterArray!=null&¶meterArray.length>0){ | ||
202 | + session= getSqlTemplate(true,false).getSqlSessionFactory().openSession(); | ||
203 | + for(int i=0;i<parameterArray.length;i++){ | ||
204 | + int row=session.insert(statement, parameterArray[i]); | ||
205 | + res+=row; | ||
206 | + } | ||
207 | + session.flushStatements(); | ||
208 | + session.commit(); | ||
209 | + } | ||
210 | + } catch (Exception ex) { | ||
211 | + //回滚由外层服务决定 | ||
212 | + throw new AppException("Mybatis执行批量插入异常", ex); | ||
213 | + } finally{ | ||
214 | + if(session!=null){ | ||
215 | + session.close(); | ||
216 | + } | ||
217 | + } | ||
218 | + return res; | ||
219 | + } | ||
220 | + | ||
221 | + /** | ||
222 | + * 查询一条记录 | ||
223 | + * @param <T> | ||
224 | + * @param statement | ||
225 | + * @param parameter | ||
226 | + * @param clz | ||
227 | + * @return | ||
228 | + */ | ||
229 | + @SuppressWarnings("unchecked") | ||
230 | + protected <T> T select(String statement,Object parameter) { | ||
231 | + T obj = null; | ||
232 | + try { | ||
233 | + obj = (T)getSqlTemplate(false,true).selectOne(statement, parameter); | ||
234 | + } catch (Exception ex) { | ||
235 | + throw new AppException("Mybatis执行单条查询异常",ex); | ||
236 | + } | ||
237 | + return obj; | ||
238 | + } | ||
239 | + | ||
240 | + /** | ||
241 | + * 查询列表 | ||
242 | + * @param <T> | ||
243 | + * @param statement | ||
244 | + * @param parameter | ||
245 | + * @param clz | ||
246 | + * @return | ||
247 | + */ | ||
248 | + protected <T> List<T> selectList(String statement,Object parameter) { | ||
249 | + List<T> list = null; | ||
250 | + try { | ||
251 | + list = getSqlTemplate(false,true).selectList(statement, parameter); | ||
252 | + } catch (Exception ex) { | ||
253 | + throw new AppException("Mybatis执行列表查询异常",ex); | ||
254 | + } | ||
255 | + return list; | ||
256 | + } | ||
257 | + | ||
258 | + /** | ||
259 | + * 查询Map | ||
260 | + * @param <K> | ||
261 | + * @param <V> | ||
262 | + * @param statement | ||
263 | + * @param parameter | ||
264 | + * @param mapKey | ||
265 | + * @return | ||
266 | + */ | ||
267 | + protected <K, V> Map<K, V> selectMap(String statement,Object parameter, String mapKey) { | ||
268 | + Map<K, V> map = null; | ||
269 | + try { | ||
270 | + map = getSqlTemplate(false,true).selectMap(statement, parameter,mapKey); | ||
271 | + } catch (Exception ex) { | ||
272 | + throw new AppException("Mybatis执行Map查询异常",ex); | ||
273 | + } | ||
274 | + return map; | ||
275 | + } | ||
276 | +} |
dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageConfigDao.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageConfigDao.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.dtms; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDao; | ||
8 | +import com.b2c.dtms.domain.DtmsMessageConfig; | ||
9 | + | ||
10 | +/** | ||
11 | + * DtmsMessageHandlerDao 接口 | ||
12 | + * @author dev-center | ||
13 | + * @since 2015-03-30 | ||
14 | + */ | ||
15 | +public interface DtmsMessageConfigDao extends BaseDao<DtmsMessageConfig,Long>{ | ||
16 | + //自定义扩展 | ||
17 | + | ||
18 | +} | ||
0 | \ No newline at end of file | 19 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageDao.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageDao.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.dtms; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDao; | ||
8 | +import com.b2c.dtms.domain.DtmsMessage; | ||
9 | + | ||
10 | +import java.util.List; | ||
11 | + | ||
12 | + | ||
13 | +/** | ||
14 | + * DtmsMessageDao 接口 | ||
15 | + * @author dev-center | ||
16 | + * @since 2015-03-30 | ||
17 | + */ | ||
18 | +public interface DtmsMessageDao extends BaseDao<DtmsMessage,Long>{ | ||
19 | + | ||
20 | + //自定义扩展 | ||
21 | + List<DtmsMessage> getListUnLockedBeforeSepcTime(DtmsMessage condition); | ||
22 | + | ||
23 | + /** | ||
24 | + * 获取锁定超时的消息 | ||
25 | + * @param condition | ||
26 | + * @return | ||
27 | + */ | ||
28 | + List<DtmsMessage> getLockTimeOutList(DtmsMessage condition); | ||
29 | + | ||
30 | + int updateByCondition(DtmsMessage dtmsMessage); | ||
31 | + | ||
32 | + int deleteByCondition(DtmsMessage condition); | ||
33 | + | ||
34 | + /** | ||
35 | + * 尝试对消息进行加锁 | ||
36 | + * @param message | ||
37 | + * @return | ||
38 | + */ | ||
39 | + int tryAddLock(DtmsMessage message); | ||
40 | + | ||
41 | + /** | ||
42 | + * 获取被加锁消息的个数 | ||
43 | + * @param dtmsMessage | ||
44 | + * @return | ||
45 | + */ | ||
46 | + int selectLockedCount(DtmsMessage dtmsMessage); | ||
47 | + | ||
48 | + /** | ||
49 | + * 解锁被加锁超时的消息 | ||
50 | + * @param updateMessage | ||
51 | + * @return | ||
52 | + */ | ||
53 | + int tryReleaseLock(DtmsMessage updateMessage); | ||
54 | + | ||
55 | + /** | ||
56 | + * 解锁被加锁超时的消息 | ||
57 | + * @param updateMessage | ||
58 | + * @return | ||
59 | + */ | ||
60 | + int tryReleaseLock(List<DtmsMessage> list); | ||
61 | + | ||
62 | + /** | ||
63 | + * 删除消息,根据消息id和版本号. | ||
64 | + * | ||
65 | + * @param message the message。必须参数值id和version | ||
66 | + * @return the int | ||
67 | + */ | ||
68 | + int deleteByKeyAndVersion(DtmsMessage message); | ||
69 | + | ||
70 | + /** | ||
71 | + * 减少消息重试次数 | ||
72 | + * @param message | ||
73 | + * @return | ||
74 | + */ | ||
75 | + int reduceRetryCount(DtmsMessage message); | ||
76 | + | ||
77 | + /** | ||
78 | + * 减少消息重试次数及下次运行时间 | ||
79 | + * @param toUpdateMessage | ||
80 | + * @return | ||
81 | + */ | ||
82 | + int reduceRetryCountAndSetNextRuntime(DtmsMessage message); | ||
83 | + | ||
84 | +} | ||
0 | \ No newline at end of file | 85 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageExceptionDao.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageExceptionDao.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.dtms; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDao; | ||
8 | +import com.b2c.dtms.domain.DtmsMessageException; | ||
9 | + | ||
10 | +/** | ||
11 | + * DtmsMessageExceptionDao 接口 | ||
12 | + * @author dev-center | ||
13 | + * @since 2015-03-30 | ||
14 | + */ | ||
15 | +public interface DtmsMessageExceptionDao extends BaseDao<DtmsMessageException,Long>{ | ||
16 | + //自定义扩展 | ||
17 | + | ||
18 | +} | ||
0 | \ No newline at end of file | 19 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageHistoryDao.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/dtms/DtmsMessageHistoryDao.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.dtms; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDao; | ||
8 | +import com.b2c.dtms.domain.DtmsMessageHistory; | ||
9 | + | ||
10 | +/** | ||
11 | + * DtmsMessageHistoryDao 接口 | ||
12 | + * @author dev-center | ||
13 | + * @since 2015-03-30 | ||
14 | + */ | ||
15 | +public interface DtmsMessageHistoryDao extends BaseDao<DtmsMessageHistory,Long>{ | ||
16 | + //自定义扩展 | ||
17 | + | ||
18 | +} | ||
0 | \ No newline at end of file | 19 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMaxidDaoImpl.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMaxidDaoImpl.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.impl; | ||
6 | + | ||
7 | +import com.b2c.dtms.common.CommonUtils; | ||
8 | +import com.b2c.dtms.dao.DtmsMaxidDao; | ||
9 | +import com.b2c.dtms.dao.base.BaseDaoImpl; | ||
10 | +import com.b2c.dtms.domain.OrderMaxid; | ||
11 | + | ||
12 | +import org.springframework.stereotype.Repository; | ||
13 | +import org.springframework.transaction.annotation.Propagation; | ||
14 | +import org.springframework.transaction.annotation.Transactional; | ||
15 | + | ||
16 | +import java.util.List; | ||
17 | + | ||
18 | +/** | ||
19 | + * OrderMaxidDao 实现类 | ||
20 | + * | ||
21 | + * @author dev-center | ||
22 | + * @since 2014-05-19 | ||
23 | + */ | ||
24 | +@Repository("orderMaxidDao") | ||
25 | +public class DtmsMaxidDaoImpl extends BaseDaoImpl<OrderMaxid, Long> implements DtmsMaxidDao { | ||
26 | + private final static String NAMESPACE = "com.b2c.dtms.dao.OrderMaxidDao."; | ||
27 | + | ||
28 | + // 返回本DAO命名空间,并添加statement | ||
29 | + public String getNameSpace(String statement) { | ||
30 | + return NAMESPACE + statement; | ||
31 | + } | ||
32 | + | ||
33 | + @Override | ||
34 | + public OrderMaxid getOrderMaxIdByIdType(String idType) { | ||
35 | + OrderMaxid orderMaxid = new OrderMaxid(); | ||
36 | + orderMaxid.setIdType(idType); | ||
37 | + List<OrderMaxid> list = this.selectEntryList(orderMaxid); | ||
38 | + if (list == null || list.isEmpty()) { | ||
39 | + return null; | ||
40 | + } | ||
41 | + if (list.size() > 1) { | ||
42 | + StringBuilder sb = new StringBuilder(); | ||
43 | + sb.append("重复的id生成类型"); | ||
44 | + sb.append(idType); | ||
45 | + sb.append(",无法确定使用哪一个"); | ||
46 | + CommonUtils.throwDataError(true, sb.toString()); | ||
47 | + } | ||
48 | + return list.get(0); | ||
49 | + } | ||
50 | + | ||
51 | + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) | ||
52 | + public SequenceNo getSeqNoByNewTransactional(SequenceNo idSequence, String seqIdKey, Long startSeq) { | ||
53 | + OrderMaxid orderMaxid = this.getOrderMaxIdByIdType(seqIdKey); | ||
54 | + if (startSeq != null && startSeq > orderMaxid.getIdValue()) {// orderMaxid.getIdValue() | ||
55 | + idSequence.setStartSeq(startSeq); | ||
56 | + } else { | ||
57 | + idSequence.setStartSeq(orderMaxid.getIdValue()); | ||
58 | + } | ||
59 | + idSequence.setFinishSeq(idSequence.getStartSeq() + idSequence.getStep()); | ||
60 | + orderMaxid.setIdValue(idSequence.getFinishSeq()); | ||
61 | + Integer result = this.updateByKey(orderMaxid); | ||
62 | + // 当更新失败后,返回空,外层进行重试 | ||
63 | + if (null == result || result < 1) { | ||
64 | + return null; | ||
65 | + } | ||
66 | + return idSequence; | ||
67 | + } | ||
68 | +} | ||
0 | \ No newline at end of file | 69 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageConfigDaoImpl.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageConfigDaoImpl.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.impl; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDaoImpl; | ||
8 | +import com.b2c.dtms.dao.dtms.DtmsMessageConfigDao; | ||
9 | +import com.b2c.dtms.domain.DtmsMessageConfig; | ||
10 | + | ||
11 | +import org.springframework.stereotype.Repository; | ||
12 | + | ||
13 | +/** | ||
14 | + * DtmsMessageHandlerDao 实现类 | ||
15 | + * @author dev-center | ||
16 | + * @since 2015-03-30 | ||
17 | + */ | ||
18 | +@Repository("dtmsMessageHandlerDao") | ||
19 | +public class DtmsMessageConfigDaoImpl extends BaseDaoImpl<DtmsMessageConfig,Long> implements DtmsMessageConfigDao { | ||
20 | + private final static String NAMESPACE = "com.b2c.dtms.dao.DtmsMessageConfigDao."; | ||
21 | + | ||
22 | + //返回本DAO命名空间,并添加statement | ||
23 | + public String getNameSpace(String statement) { | ||
24 | + return NAMESPACE + statement; | ||
25 | + } | ||
26 | + | ||
27 | +} | ||
0 | \ No newline at end of file | 28 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageDaoImpl.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageDaoImpl.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.impl; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDaoImpl; | ||
8 | +import com.b2c.dtms.dao.dtms.DtmsMessageDao; | ||
9 | +import com.b2c.dtms.domain.DtmsMessage; | ||
10 | + | ||
11 | +import org.springframework.stereotype.Repository; | ||
12 | + | ||
13 | +import java.util.List; | ||
14 | + | ||
15 | +/** | ||
16 | + * DtmsMessageDao 实现类 | ||
17 | + * | ||
18 | + * @author dev-center | ||
19 | + * @since 2015-03-30 | ||
20 | + */ | ||
21 | +@Repository("dtmsMessageDao") | ||
22 | +public class DtmsMessageDaoImpl extends BaseDaoImpl<DtmsMessage, Long> implements DtmsMessageDao { | ||
23 | + private final static String NAMESPACE = "com.b2c.dtms.dao.DtmsMessageDao."; | ||
24 | + | ||
25 | + // 返回本DAO命名空间,并添加statement | ||
26 | + public String getNameSpace(String statement) { | ||
27 | + return NAMESPACE + statement; | ||
28 | + } | ||
29 | + | ||
30 | + @Override | ||
31 | + public List<DtmsMessage> getListUnLockedBeforeSepcTime(DtmsMessage condition) { | ||
32 | + return this.selectList(this.getNameSpace("getListUnLockedBeforeSepcTime"), condition); | ||
33 | + } | ||
34 | + | ||
35 | + @Override | ||
36 | + public List<DtmsMessage> getLockTimeOutList(DtmsMessage condition) { | ||
37 | + return this.selectList(this.getNameSpace("getLockTimeOutList"), condition); | ||
38 | + } | ||
39 | + | ||
40 | + @Override | ||
41 | + public int updateByCondition(DtmsMessage condition) { | ||
42 | + return this.update(this.getNameSpace("updateByCondtion"), condition); | ||
43 | + } | ||
44 | + | ||
45 | + @Override | ||
46 | + public int deleteByCondition(DtmsMessage condition) { | ||
47 | + return this.delete(this.getNameSpace("deleteByCondtion"), condition); | ||
48 | + } | ||
49 | + | ||
50 | + @Override | ||
51 | + public int tryAddLock(DtmsMessage message) { | ||
52 | + return this.update(this.getNameSpace("tryAddLock"), message); | ||
53 | + } | ||
54 | + | ||
55 | + @Override | ||
56 | + public int selectLockedCount(DtmsMessage message) { | ||
57 | + return this.select(this.getNameSpace("selectLockedCount"), message); | ||
58 | + } | ||
59 | + | ||
60 | + @Override | ||
61 | + public int tryReleaseLock(DtmsMessage message) { | ||
62 | + return this.update(this.getNameSpace("tryReleaseLock"), message); | ||
63 | + } | ||
64 | + | ||
65 | + @Override | ||
66 | + public int tryReleaseLock(List<DtmsMessage> list) { | ||
67 | + return this.updateBatch(this.getNameSpace("tryReleaseLock"), list); | ||
68 | + } | ||
69 | + | ||
70 | + @Override | ||
71 | + public int deleteByKeyAndVersion(DtmsMessage message) { | ||
72 | + return this.delete(this.getNameSpace("deleteByKeyAndVersion"), message); | ||
73 | + } | ||
74 | + | ||
75 | + @Override | ||
76 | + public int reduceRetryCount(DtmsMessage message) { | ||
77 | + return this.update(this.getNameSpace("reduceRetryCount"), message); | ||
78 | + } | ||
79 | + | ||
80 | + @Override | ||
81 | + public int reduceRetryCountAndSetNextRuntime(DtmsMessage message) { | ||
82 | + return this.update(this.getNameSpace("reduceRetryCountAndSetNextRuntime"), message); | ||
83 | + } | ||
84 | +} | ||
0 | \ No newline at end of file | 85 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageExceptionDaoImpl.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageExceptionDaoImpl.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.impl; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDaoImpl; | ||
8 | +import com.b2c.dtms.dao.dtms.DtmsMessageExceptionDao; | ||
9 | +import com.b2c.dtms.domain.DtmsMessageException; | ||
10 | + | ||
11 | +import org.springframework.stereotype.Repository; | ||
12 | + | ||
13 | +/** | ||
14 | + * DtmsMessageExceptionDao 实现类 | ||
15 | + * | ||
16 | + * @author dev-center | ||
17 | + * @since 2015-03-30 | ||
18 | + */ | ||
19 | +@Repository("dtmsMessageExceptionDao") | ||
20 | +public class DtmsMessageExceptionDaoImpl extends BaseDaoImpl<DtmsMessageException, Long> | ||
21 | + implements DtmsMessageExceptionDao { | ||
22 | + private final static String NAMESPACE = "com.b2c.dtms.dao.DtmsMessageExceptionDao."; | ||
23 | + | ||
24 | + // 返回本DAO命名空间,并添加statement | ||
25 | + public String getNameSpace(String statement) { | ||
26 | + return NAMESPACE + statement; | ||
27 | + } | ||
28 | + | ||
29 | +} | ||
0 | \ No newline at end of file | 30 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageHistoryDaoImpl.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/impl/DtmsMessageHistoryDaoImpl.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2015 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.dao.impl; | ||
6 | + | ||
7 | +import com.b2c.dtms.dao.base.BaseDaoImpl; | ||
8 | +import com.b2c.dtms.dao.dtms.DtmsMessageHistoryDao; | ||
9 | +import com.b2c.dtms.domain.DtmsMessageHistory; | ||
10 | + | ||
11 | +import org.springframework.stereotype.Repository; | ||
12 | + | ||
13 | +/** | ||
14 | + * DtmsMessageLogDao 实现类 | ||
15 | + * @author dev-center | ||
16 | + * @since 2015-03-30 | ||
17 | + */ | ||
18 | +@Repository("dtmsMessageHistoryDao") | ||
19 | +public class DtmsMessageHistoryDaoImpl extends BaseDaoImpl<DtmsMessageHistory,Long> implements DtmsMessageHistoryDao { | ||
20 | + private final static String NAMESPACE = "com.b2c.dtms.dao.DtmsMessageHistoryDao."; | ||
21 | + | ||
22 | + //返回本DAO命名空间,并添加statement | ||
23 | + public String getNameSpace(String statement) { | ||
24 | + return NAMESPACE + statement; | ||
25 | + } | ||
26 | + | ||
27 | +} | ||
0 | \ No newline at end of file | 28 | \ No newline at end of file |
dtms-dao/src/main/java/com/b2c/dtms/dao/typehandler/LongToDate.java
0 → 100644
1 | +++ a/dtms-dao/src/main/java/com/b2c/dtms/dao/typehandler/LongToDate.java | ||
1 | +package com.b2c.dtms.dao.typehandler; | ||
2 | + | ||
3 | +import java.sql.CallableStatement; | ||
4 | +import java.sql.PreparedStatement; | ||
5 | +import java.sql.ResultSet; | ||
6 | +import java.sql.SQLException; | ||
7 | +import java.util.Date; | ||
8 | + | ||
9 | +import org.apache.ibatis.type.BaseTypeHandler; | ||
10 | +import org.apache.ibatis.type.JdbcType; | ||
11 | + | ||
12 | +public class LongToDate extends BaseTypeHandler<Date> { | ||
13 | + | ||
14 | + @Override | ||
15 | + public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) | ||
16 | + throws SQLException { | ||
17 | + ps.setObject(i, parameter.getTime()); | ||
18 | + } | ||
19 | + | ||
20 | + @Override | ||
21 | + public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { | ||
22 | + long value = rs.getLong(columnName); | ||
23 | + if (value <= 0) { | ||
24 | + return null; | ||
25 | + } | ||
26 | + return new Date(value); | ||
27 | + } | ||
28 | + | ||
29 | + @Override | ||
30 | + public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException { | ||
31 | + if (rs.wasNull()) { | ||
32 | + return null; | ||
33 | + } | ||
34 | + long value = rs.getLong(columnIndex); | ||
35 | + if (value <= 0) { | ||
36 | + return null; | ||
37 | + } | ||
38 | + return new Date(value); | ||
39 | + } | ||
40 | + | ||
41 | + @Override | ||
42 | + public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { | ||
43 | + if (cs.wasNull()) { | ||
44 | + return null; | ||
45 | + } | ||
46 | + long value = cs.getLong(columnIndex); | ||
47 | + if (value <= 0) { | ||
48 | + return null; | ||
49 | + } | ||
50 | + return new Date(value); | ||
51 | + } | ||
52 | + | ||
53 | +} |
dtms-dao/src/main/resources/spring-config-dao.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/spring-config-dao.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<beans xmlns="http://www.springframework.org/schema/beans" | ||
3 | + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
4 | + xmlns:context="http://www.springframework.org/schema/context" | ||
5 | + xmlns:aop="http://www.springframework.org/schema/aop" | ||
6 | + xsi:schemaLocation="http://www.springframework.org/schema/beans | ||
7 | + http://www.springframework.org/schema/beans/spring-beans.xsd | ||
8 | + http://www.springframework.org/schema/context | ||
9 | + http://www.springframework.org/schema/context/spring-context.xsd | ||
10 | + http://www.springframework.org/schema/aop | ||
11 | + http://www.springframework.org/schema/aop/spring-aop.xsd" | ||
12 | + default-autowire="byName"> | ||
13 | + | ||
14 | + <context:component-scan base-package="com.b2c.dtms.dao"/> | ||
15 | + | ||
16 | + <bean id="masterDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> | ||
17 | + <property name="driverClassName" value="${jdbc.driverClass}" /> | ||
18 | + <property name="url" value="${jdbc.jdbcUrl}" /> | ||
19 | + <property name="username" value="${jdbc.username}" /> | ||
20 | + <property name="password" value="${jdbc.password}" /> | ||
21 | + <!-- 添加监控,SQL注入防火墙--> | ||
22 | + <property name="filters" value="stat,logback" /> | ||
23 | + <!-- 慢查询 --> | ||
24 | + <property name="connectionProperties" value="druid.stat.slowSqlMillis=1000" /> | ||
25 | + <property name="maxActive" value="100" /> | ||
26 | + <property name="initialSize" value="1" /> | ||
27 | + <property name="maxWait" value="60000" /> | ||
28 | + <property name="minIdle" value="1" /> | ||
29 | + <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> | ||
30 | + <property name="timeBetweenEvictionRunsMillis" value="60000" /> | ||
31 | + <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> | ||
32 | + <property name="minEvictableIdleTimeMillis" value="300000" /> | ||
33 | + <property name="validationQuery" value="SELECT now()" /> | ||
34 | + <property name="testWhileIdle" value="true" /> | ||
35 | + <property name="testOnBorrow" value="false" /> | ||
36 | + <property name="testOnReturn" value="false" /> | ||
37 | + <!-- 打开PSCache,并且指定每个连接上PSCache的大小 --> | ||
38 | + <property name="poolPreparedStatements" value="true" /> | ||
39 | + <property name="maxOpenPreparedStatements" value="20" /> | ||
40 | + | ||
41 | + <!-- 超过时间限制是否回收 --> | ||
42 | + <property name="removeAbandoned" value="true" /> | ||
43 | + <!-- 超时时间;单位为秒。180秒=3分钟 --> | ||
44 | + <property name="removeAbandonedTimeout" value="180" /> | ||
45 | + <!-- 关闭abanded连接时输出错误日志 --> | ||
46 | + <property name="logAbandoned" value="true" /> | ||
47 | + | ||
48 | + <!-- 配置公用监控数据 --> | ||
49 | + <property name="useGlobalDataSourceStat" value="true" /> | ||
50 | + </bean> | ||
51 | + | ||
52 | + <!-- 配置事务管理器 --> | ||
53 | + <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> | ||
54 | + <property name="dataSource" ref="masterDataSource" /> | ||
55 | + </bean> | ||
56 | + | ||
57 | + <!-- 集成Mybatis --> | ||
58 | + <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> | ||
59 | + <property name="dataSource" ref="masterDataSource" /> | ||
60 | + <property name="configLocation" value="classpath:sqlmap-config.xml" /> | ||
61 | + </bean> | ||
62 | + <bean id="sqlTemplate" class="org.mybatis.spring.SqlSessionTemplate"> | ||
63 | + <constructor-arg index="0" ref="sessionFactory" /> | ||
64 | + </bean> | ||
65 | + <bean id="batchSqlTemplate" class="org.mybatis.spring.SqlSessionTemplate"> | ||
66 | + <constructor-arg index="0" ref="sessionFactory" /> | ||
67 | + <constructor-arg index="1" value="BATCH" /> | ||
68 | + </bean> | ||
69 | + | ||
70 | + <!-- druid spring监控 --> | ||
71 | + <bean id="druid-stat-interceptor" | ||
72 | + class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"> | ||
73 | + </bean> | ||
74 | + <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype"> | ||
75 | + <property name="patterns"> | ||
76 | + <list> | ||
77 | + <value>com.b2c.dtms.service.*</value> | ||
78 | + <value>com.b2c.dtms.dao.*</value> | ||
79 | + </list> | ||
80 | + </property> | ||
81 | + </bean> | ||
82 | + <aop:config> | ||
83 | + <aop:advisor advice-ref="druid-stat-interceptor" | ||
84 | + pointcut-ref="druid-stat-pointcut" /> | ||
85 | + </aop:config> | ||
86 | +</beans> | ||
0 | \ No newline at end of file | 87 | \ No newline at end of file |
dtms-dao/src/main/resources/sqlmap-config.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/sqlmap-config.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> | ||
3 | + | ||
4 | +<configuration> | ||
5 | + <settings> | ||
6 | + <!-- 全局映射器启用缓存 --> | ||
7 | + <setting name="cacheEnabled" value="true" /> | ||
8 | + <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 --> | ||
9 | + <setting name="multipleResultSetsEnabled" value="true" /> | ||
10 | + <!-- 允许使用列标签代替列名 --> | ||
11 | + <setting name="useColumnLabel" value="true" /> | ||
12 | + <!-- 数据库超过25000秒仍未响应则超时 --> | ||
13 | + <setting name="defaultStatementTimeout" value="25000" /> | ||
14 | + <setting name="logImpl" value="STDOUT_LOGGING" /> | ||
15 | + </settings> | ||
16 | + | ||
17 | + <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 --> | ||
18 | + <typeAliases> | ||
19 | + <typeAlias type="com.b2c.dtms.domain.OrderMaxid" alias="orderMaxid" /> | ||
20 | + <typeAlias type="com.b2c.dtms.domain.DtmsMessage" alias="dtmsMessage" /> | ||
21 | + <typeAlias type="com.b2c.dtms.domain.DtmsMessageException" | ||
22 | + alias="dtmsMessageException" /> | ||
23 | + <typeAlias type="com.b2c.dtms.domain.DtmsMessageConfig" | ||
24 | + alias="dtmsMessageConfig" /> | ||
25 | + <typeAlias type="com.b2c.dtms.domain.DtmsMessageHistory" | ||
26 | + alias="dtmsMessageHistory" /> | ||
27 | + </typeAliases> | ||
28 | + | ||
29 | + <typeHandlers> | ||
30 | + <typeHandler handler="com.b2c.dtms.dao.typehandler.LongToDate" | ||
31 | + javaType="java.util.Date" /> | ||
32 | + </typeHandlers> | ||
33 | + | ||
34 | + <!-- 映射文件路径 --> | ||
35 | + <mappers> | ||
36 | + <mapper resource="sqlmap/OrderMaxid.xml" /> | ||
37 | + <mapper resource="sqlmap/dtms/DtmsMessage.xml" /> | ||
38 | + <mapper resource="sqlmap/dtms/DtmsMessageException.xml" /> | ||
39 | + <mapper resource="sqlmap/dtms/DtmsMessageConfig.xml" /> | ||
40 | + <mapper resource="sqlmap/dtms/DtmsMessageHistory.xml" /> | ||
41 | + </mappers> | ||
42 | + | ||
43 | + | ||
44 | +</configuration> | ||
0 | \ No newline at end of file | 45 | \ No newline at end of file |
dtms-dao/src/main/resources/sqlmap/OrderMaxid.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/sqlmap/OrderMaxid.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
3 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
4 | +<mapper namespace="com.b2c.dtms.dao.OrderMaxidDao"> | ||
5 | + | ||
6 | + <!-- order_maxid 所有查询列 --> | ||
7 | + <sql id="QUERY_COLUMN_LIST"> | ||
8 | + <!-- [CDATA[id,id_type AS idType,id_value AS idValue,memo,version_num AS versionNum]]--> | ||
9 | + <![CDATA[id,id_value AS idValue,version_num AS versionNum]]> | ||
10 | + </sql> | ||
11 | + | ||
12 | + <!-- order_maxid 查询列来源表--> | ||
13 | + <sql id="QUERY_FROM_TABLE"><![CDATA[FROM order_maxid]]></sql> | ||
14 | + | ||
15 | + <!-- 全部条件(更多功能可以通过queryData扩展实现) --> | ||
16 | + <sql id="QUERY_WHERE_CLAUSE"> | ||
17 | + <where> | ||
18 | + <if test="id != null and id != ''"><![CDATA[AND id = #{id}]]></if> | ||
19 | + <if test="idType != null and idType != ''"><![CDATA[AND id_type = #{idType}]]></if> | ||
20 | + <if test="idValue != null and idValue != ''"><![CDATA[AND id_value = #{idValue}]]></if> | ||
21 | + <if test="memo != null and memo != ''"><![CDATA[AND memo = #{memo}]]></if> | ||
22 | + <if test="versionNum != null and versionNum != ''"><![CDATA[AND version_num = #{versionNum}]]></if> | ||
23 | + </where> | ||
24 | + </sql> | ||
25 | + | ||
26 | + <!-- 智能排序与分页 --> | ||
27 | + <sql id="QUERY_ORDER_LIMIT_CONDTION"> | ||
28 | + <choose> | ||
29 | + <when test="orderField != null and orderField != ''"> | ||
30 | + <choose> | ||
31 | + <when test="orderFieldType != null and orderFieldType != ''"> | ||
32 | + <![CDATA[ORDER BY ${orderField} ${orderFieldType}]]> | ||
33 | + </when> | ||
34 | + <otherwise> | ||
35 | + <![CDATA[ORDER BY ${orderField} desc]]> | ||
36 | + </otherwise> | ||
37 | + </choose> | ||
38 | + </when> | ||
39 | + <otherwise> | ||
40 | + <![CDATA[ORDER BY id desc]]> | ||
41 | + </otherwise> | ||
42 | + </choose> | ||
43 | + <if test="startIndex != null and startIndex >= 0 and pageSize != null and pageSize > 0"><![CDATA[LIMIT #{startIndex},#{pageSize}]]></if> | ||
44 | + </sql> | ||
45 | + | ||
46 | + <!-- 更新列字段,只要不为NULL则更新,除开主键列 --> | ||
47 | + <sql id="UPDATE_COLUMN_SET"> | ||
48 | + <set> | ||
49 | + <if test="idType != null"><![CDATA[id_type = #{idType},]]></if> | ||
50 | + <if test="idValue != null"><![CDATA[id_value = #{idValue},]]></if> | ||
51 | + <if test="memo != null"><![CDATA[memo = #{memo},]]></if> | ||
52 | + <![CDATA[version_num = version_num + 1,]]> | ||
53 | + </set> | ||
54 | + </sql> | ||
55 | + | ||
56 | + <!-- 插入order_maxid记录 --> | ||
57 | + <insert id="insertEntry" parameterType="orderMaxid" > | ||
58 | + <![CDATA[ | ||
59 | + INSERT INTO order_maxid (id,id_type,id_value,memo,version_num) | ||
60 | + VALUES (#{id},#{idType},#{idValue},#{memo},#{versionNum}) | ||
61 | + ]]> | ||
62 | + </insert> | ||
63 | + | ||
64 | + <!-- 返回插入的编号,在事务开启状态下有效 --> | ||
65 | + <select id="lastSequence" resultType="int"><![CDATA[SELECT LAST_INSERT_ID() AS id]]></select> | ||
66 | + | ||
67 | + <!-- 删除记录,主键IN(array) --> | ||
68 | + <delete id="deleteByArrayKey" parameterType="java.lang.reflect.Array" > | ||
69 | + <![CDATA[DELETE FROM order_maxid WHERE id IN]]> | ||
70 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
71 | + <![CDATA[#{id}]]> | ||
72 | + </foreach> | ||
73 | + </delete> | ||
74 | + | ||
75 | + <!-- 删除,通过条件 --> | ||
76 | + <update id="deleteByCondtion" parameterType="orderMaxid" > | ||
77 | + <![CDATA[DELETE FROM order_maxid]]> | ||
78 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
79 | + </update> | ||
80 | + | ||
81 | + <!-- 修改记录通过主键 --> | ||
82 | + <update id="updateByKey" parameterType="orderMaxid" > | ||
83 | + <![CDATA[UPDATE order_maxid]]> | ||
84 | + <include refid="UPDATE_COLUMN_SET"/> | ||
85 | + <![CDATA[WHERE id = #{id} AND version_num = #{versionNum}]]> | ||
86 | + </update> | ||
87 | + | ||
88 | + <!-- 查询,通过主键IN(array) --> | ||
89 | + <select id="selectEntryArray" parameterType="java.lang.reflect.Array" resultType="orderMaxid"> | ||
90 | + <![CDATA[SELECT]]> | ||
91 | + <include refid="QUERY_COLUMN_LIST"/> | ||
92 | + <include refid="QUERY_FROM_TABLE"/> | ||
93 | + <![CDATA[WHERE id IN]]> | ||
94 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
95 | + <![CDATA[#{id}]]> | ||
96 | + </foreach> | ||
97 | + </select> | ||
98 | + | ||
99 | + <!-- 查询,通过条件 --> | ||
100 | + <select id="selectEntryList" parameterType="orderMaxid" resultType="orderMaxid"> | ||
101 | + <![CDATA[SELECT]]> | ||
102 | + <include refid="QUERY_COLUMN_LIST"/> | ||
103 | + <include refid="QUERY_FROM_TABLE"/> | ||
104 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
105 | + <include refid="QUERY_ORDER_LIMIT_CONDTION"/> | ||
106 | + </select> | ||
107 | + | ||
108 | + <!-- 总数查询,通过条件 --> | ||
109 | + <select id="selectEntryListCount" parameterType="orderMaxid" resultType="int"> | ||
110 | + <![CDATA[SELECT COUNT(id) AS dataCount]]> | ||
111 | + <include refid="QUERY_FROM_TABLE"/> | ||
112 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
113 | + </select> | ||
114 | + | ||
115 | + <!-- 其它SQL语句 --> | ||
116 | + | ||
117 | + | ||
118 | +</mapper> | ||
0 | \ No newline at end of file | 119 | \ No newline at end of file |
dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessage.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessage.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
3 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
4 | +<mapper namespace="com.b2c.dtms.dao.DtmsMessageDao"> | ||
5 | + | ||
6 | + <!-- dtms_message 所有查询列 --> | ||
7 | + <sql id="QUERY_COLUMN_LIST"> | ||
8 | + <![CDATA[id,biz_id AS bizId,delay_seconds as delaySeconds,runtime,topic,content,memo,create_time AS createTime,wait_retry_num AS waitRetryNum,version,call_url AS callUrl,confirm_url AS confirmUrl,tag AS tag,lock_status AS lockStatus,lock_time AS lockTime,status,type,latest_consume_log AS latestConsumeLog]]> | ||
9 | + </sql> | ||
10 | + | ||
11 | + <!-- dtms_message 查询列来源表--> | ||
12 | + <sql id="QUERY_FROM_TABLE"><![CDATA[FROM dtms_message]]></sql> | ||
13 | + | ||
14 | + <!-- 全部条件(更多功能可以通过queryData扩展实现) --> | ||
15 | + <sql id="QUERY_WHERE_CLAUSE"> | ||
16 | + <where> | ||
17 | + <if test="id != null and id != ''"><![CDATA[AND id = #{id}]]></if> | ||
18 | + <if test="bizId != null and bizId != ''"><![CDATA[AND biz_id = #{bizId}]]></if> | ||
19 | + <if test="delaySeconds != null and delaySeconds != ''"><![CDATA[AND delay_seconds = #{delaySeconds}]]></if> | ||
20 | + <if test="runtime != null and runtime != ''"><![CDATA[AND runtime = #{runtime}]]></if> | ||
21 | + <if test="topic != null and topic != ''"><![CDATA[AND topic = #{topic}]]></if> | ||
22 | + <if test="content != null and content != ''"><![CDATA[AND content = #{content}]]></if> | ||
23 | + <if test="memo != null and memo != ''"><![CDATA[AND memo = #{memo}]]></if> | ||
24 | + <if test="createTime != null and createTime != ''"><![CDATA[AND create_time = #{createTime}]]></if> | ||
25 | + <if test="waitRetryNum != null and waitRetryNum != ''"><![CDATA[AND wait_retry_num = #{waitRetryNum}]]></if> | ||
26 | + <if test="callUrl != null and callUrl != ''"><![CDATA[AND call_url = #{callUrl}]]></if> | ||
27 | + <if test="confirmUrl != null and confirmUrl != ''"><![CDATA[AND confirm_url = #{confirmUrl}]]></if> | ||
28 | + <if test="version != null"><![CDATA[AND version = #{version}]]></if> | ||
29 | + <if test="lockStatus != null and lockStatus != ''"><![CDATA[AND lock_status = #{lockStatus}]]></if> | ||
30 | + <if test="lockTime != null and lockTime != ''"><![CDATA[AND lock_time = #{lockTime}]]></if> | ||
31 | + <if test="status != null and status != ''"><![CDATA[AND status = #{status}]]></if> | ||
32 | + <if test="type != null and type != ''"><![CDATA[AND type = #{type}]]></if> | ||
33 | + <choose> | ||
34 | + <when test="tag != null and tag != ''"> | ||
35 | + <![CDATA[AND tag = #{tag}]]> | ||
36 | + </when> | ||
37 | + <otherwise> | ||
38 | + <if test="queryData != null and queryData != '' and queryData.tags!=null and queryData.tags.size>0"> | ||
39 | + <![CDATA[ AND tag in ]]> | ||
40 | + <foreach item="item" index="index" collection="queryData.tags" open="(" separator="," close=")"> | ||
41 | + #{item} | ||
42 | + </foreach> | ||
43 | + </if> | ||
44 | + </otherwise> | ||
45 | + </choose> | ||
46 | + </where> | ||
47 | + </sql> | ||
48 | + | ||
49 | + <!-- 智能排序与分页 --> | ||
50 | + <sql id="QUERY_ORDER_LIMIT_CONDTION"> | ||
51 | + <if test="orderField != null and orderField != '' and orderFieldType != null and orderFieldType != ''"><![CDATA[ORDER BY ${orderField} ${orderFieldType}]]></if> | ||
52 | + <if test="startIndex != null and startIndex >= 0 and pageSize != null and pageSize > 0"><![CDATA[LIMIT #{startIndex},#{pageSize}]]></if> | ||
53 | + </sql> | ||
54 | + | ||
55 | + <!-- 更新列字段,只要不为NULL则更新,除开主键列 --> | ||
56 | + <sql id="UPDATE_COLUMN_SET"> | ||
57 | + <set> | ||
58 | + <if test="bizId != null"><![CDATA[biz_id = #{bizId},]]></if> | ||
59 | + <if test="delaySeconds != null"><![CDATA[delay_seconds = #{delaySeconds},]]></if> | ||
60 | + <if test="runtime != null"><![CDATA[runtime = #{runtime},]]></if> | ||
61 | + <if test="topic != null"><![CDATA[topic = #{topic},]]></if> | ||
62 | + <if test="content != null"><![CDATA[content = #{content},]]></if> | ||
63 | + <if test="memo != null"><![CDATA[memo = #{memo},]]></if> | ||
64 | + <if test="createTime != null"><![CDATA[create_time = #{createTime},]]></if> | ||
65 | + <if test="waitRetryNum != null"><![CDATA[wait_retry_num = #{waitRetryNum},]]></if> | ||
66 | + <if test="version != null"><![CDATA[version = #{version},]]></if> | ||
67 | + <if test="callUrl != null"><![CDATA[call_url = #{callUrl},]]></if> | ||
68 | + <if test="confirmUrl != null"><![CDATA[confirm_url = #{confirmUrl},]]></if> | ||
69 | + <if test="tag != null"><![CDATA[tag = #{tag},]]></if> | ||
70 | + <if test="lockStatus != null"><![CDATA[lock_status = #{lockStatus},]]></if> | ||
71 | + <if test="type != null"><![CDATA[type = #{type},]]></if> | ||
72 | + <if test="latestConsumeLog != null"><![CDATA[latest_consume_log = #{latestConsumeLog},]]></if> | ||
73 | + <choose> | ||
74 | + <when test="queryData != null and queryData.ignoreLockTimeNullCheck=='true'"> | ||
75 | + <![CDATA[lock_time = #{lockTime},]]> | ||
76 | + </when> | ||
77 | + <otherwise> | ||
78 | + <if test="lockTime != null"><![CDATA[lock_time = #{lockTime},]]></if> | ||
79 | + </otherwise> | ||
80 | + </choose> | ||
81 | + <if test="status != null"><![CDATA[status = #{status},]]></if> | ||
82 | + <![CDATA[version = version + 1,]]> | ||
83 | + </set> | ||
84 | + </sql> | ||
85 | + | ||
86 | + <!-- 插入dtms_message记录 --> | ||
87 | + <insert id="insertEntry" parameterType="dtmsMessage" > | ||
88 | + <![CDATA[ | ||
89 | + INSERT INTO dtms_message (id,biz_id,delay_seconds,runtime,topic,content,memo,create_time,wait_retry_num,version,call_url,confirm_url,tag,lock_status,lock_time,status,type,latest_consume_log) | ||
90 | + VALUES (#{id},#{bizId},#{delaySeconds},#{runtime},#{topic},#{content},#{memo},#{createTime},#{waitRetryNum},#{version},#{callUrl},#{confirmUrl},#{tag},0,#{lockTime},#{status},#{type},#{latestConsumeLog}) | ||
91 | + ]]> | ||
92 | + </insert> | ||
93 | + | ||
94 | + <!-- 返回插入的编号,在事务开启状态下有效 --> | ||
95 | + <select id="lastSequence" resultType="int"><![CDATA[SELECT LAST_INSERT_ID() AS id]]></select> | ||
96 | + | ||
97 | + <!-- 删除记录,主键IN(array) --> | ||
98 | + <delete id="deleteByArrayKey" parameterType="java.lang.reflect.Array" > | ||
99 | + <![CDATA[DELETE FROM dtms_message WHERE id IN]]> | ||
100 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
101 | + <![CDATA[#{id}]]> | ||
102 | + </foreach> | ||
103 | + </delete> | ||
104 | + | ||
105 | + <!-- 删除,通过条件 --> | ||
106 | + <update id="deleteByCondtion" parameterType="dtmsMessage" > | ||
107 | + <![CDATA[DELETE FROM dtms_message]]> | ||
108 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
109 | + </update> | ||
110 | + | ||
111 | + <!-- 修改记录通过主键 --> | ||
112 | + <update id="updateByKey" parameterType="dtmsMessage" > | ||
113 | + <![CDATA[UPDATE dtms_message]]> | ||
114 | + <include refid="UPDATE_COLUMN_SET"/> | ||
115 | + <where> | ||
116 | + <if test="id != null"><![CDATA[AND id = #{id}]]></if> | ||
117 | + <if test="queryData != null and queryData.ignoreVersion!='true'"> | ||
118 | + AND version =#{version} | ||
119 | + </if> | ||
120 | + </where> | ||
121 | + </update> | ||
122 | + | ||
123 | + <update id="updateByCondtion" parameterType="dtmsMessage" > | ||
124 | + <![CDATA[UPDATE dtms_message]]> | ||
125 | + <include refid="UPDATE_COLUMN_SET"/> | ||
126 | + <where> | ||
127 | + <if test="queryData != null and queryData != ''"> | ||
128 | + <if test="queryData.id!=null"><![CDATA[AND id = #{queryData.id}]]></if> | ||
129 | + <if test="queryData.bizId != null"><![CDATA[AND biz_id = #{queryData.bizId}]]></if> | ||
130 | + <if test="queryData.delaySeconds != null"><![CDATA[AND delay_seconds = #{queryData.delaySeconds}]]></if> | ||
131 | + <if test="queryData.runtime != null"><![CDATA[AND runtime = #{queryData.runtime}]]></if> | ||
132 | + <if test="queryData.topic != null"><![CDATA[AND a.topic <= #{queryData.topic}]]></if> | ||
133 | + <if test="queryData.content != null"><![CDATA[AND content = #{queryData.content}]]></if> | ||
134 | + <if test="queryData.memo != null"><![CDATA[AND memo = #{queryData.memo}]]></if> | ||
135 | + <if test="queryData.createTime != null"><![CDATA[AND create_time = #{queryData.createTime}]]></if> | ||
136 | + <if test="queryData.waitRetryNum != null"><![CDATA[AND wait_retry_num = #{queryData.waitRetryNum}]]></if> | ||
137 | + <if test="queryData.callUrl != null"><![CDATA[AND call_url = #{queryData.callUrl}]]></if> | ||
138 | + <if test="queryData.confirmUrl != null"><![CDATA[AND confirm_url = #{queryData.confirmUrl}]]></if> | ||
139 | + <if test="queryData.version != null"><![CDATA[AND version = #{queryData.version}]]></if> | ||
140 | + <if test="queryData.lockStatus != null"><![CDATA[AND lock_status = #{queryData.lockStatus}]]></if> | ||
141 | + <if test="queryData.lockTime != null"><![CDATA[AND lock_time = #{queryData.lockTime}]]></if> | ||
142 | + <if test="queryData.status != null"><![CDATA[AND status = #{queryData.status}]]></if> | ||
143 | + <if test="queryData.tag != null"><![CDATA[AND tag = #{queryData.tag}]]></if> | ||
144 | + <if test="queryData.type != null"><![CDATA[AND type = #{queryData.type}]]></if> | ||
145 | + <if test="queryData.idList!=null and queryData.idList.size>0"> | ||
146 | + <![CDATA[ AND id in ]]> | ||
147 | + <foreach item="item" index="index" collection="queryData.idList" open="(" separator="," close=")"> | ||
148 | + #{item} | ||
149 | + </foreach> | ||
150 | + </if> | ||
151 | + </if> | ||
152 | + </where> | ||
153 | + </update> | ||
154 | + | ||
155 | + <!-- 查询,通过主键IN(array) --> | ||
156 | + <select id="selectEntryArray" parameterType="java.lang.reflect.Array" resultType="dtmsMessage"> | ||
157 | + <![CDATA[SELECT]]> | ||
158 | + <include refid="QUERY_COLUMN_LIST"/> | ||
159 | + <include refid="QUERY_FROM_TABLE"/> | ||
160 | + <![CDATA[WHERE id IN]]> | ||
161 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
162 | + <![CDATA[#{id}]]> | ||
163 | + </foreach> | ||
164 | + </select> | ||
165 | + | ||
166 | + <!-- 查询,通过条件 --> | ||
167 | + <select id="selectEntryList" parameterType="dtmsMessage" resultType="dtmsMessage"> | ||
168 | + <![CDATA[SELECT]]> | ||
169 | + <include refid="QUERY_COLUMN_LIST"/> | ||
170 | + <include refid="QUERY_FROM_TABLE"/> | ||
171 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
172 | + <include refid="QUERY_ORDER_LIMIT_CONDTION"/> | ||
173 | + </select> | ||
174 | + | ||
175 | + <!-- 总数查询,通过条件 --> | ||
176 | + <select id="selectEntryListCount" parameterType="dtmsMessage" resultType="int"> | ||
177 | + <![CDATA[SELECT COUNT(id) AS dataCount]]> | ||
178 | + <include refid="QUERY_FROM_TABLE"/> | ||
179 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
180 | + </select> | ||
181 | + | ||
182 | + <!-- 其它SQL语句 --> | ||
183 | + <!-- | ||
184 | + 查询场景: | ||
185 | + 1 非定时任务未经过二次确认,且运行时间未到达时,不能被执行 | ||
186 | + 2 非定时任务经过二次确认,忽略运行时间,可以直接被执行 | ||
187 | + 3 定时任务,无论是否经过二次确认,都需要等待运行时间到达时才能被运行 | ||
188 | + --> | ||
189 | + <select id="getListUnLockedBeforeSepcTime" parameterType="dtmsMessage" resultType="dtmsMessage"> | ||
190 | + <![CDATA[SELECT distinct]]> | ||
191 | + <include refid="QUERY_COLUMN_LIST"/> | ||
192 | + <include refid="QUERY_FROM_TABLE"/> | ||
193 | + <where> | ||
194 | + <![CDATA[AND lock_status =0]]> | ||
195 | + <![CDATA[AND lock_time is null]]> | ||
196 | + <![CDATA[AND ((status=10 and runtime<= #{runtime} and type=1) or | ||
197 | + (status=20 and type=1) or | ||
198 | + (status in (10,20) and runtime<= #{runtime} and type in (2,3)))]]> | ||
199 | + </where> | ||
200 | + <![CDATA[LIMIT #{startIndex},#{endIndex}]]> | ||
201 | + </select> | ||
202 | + | ||
203 | + <select id="getLockTimeOutList" parameterType="dtmsMessage" resultType="dtmsMessage"> | ||
204 | + SELECT a.id, | ||
205 | + a.biz_id AS bizId, | ||
206 | + a.topic, | ||
207 | + a.version, | ||
208 | + a.tag AS tag, | ||
209 | + a.lock_status AS lockStatus, | ||
210 | + a.lock_time AS lockTime | ||
211 | + from dtms_message a ,dtms_message_config b | ||
212 | + <where> | ||
213 | + a.topic=b.msg_topic | ||
214 | + <if test="lockStatus != null and lockStatus != ''"><![CDATA[AND a.lock_status=#{lockStatus}]]></if> | ||
215 | + <if test="queryData != null and queryData != ''"> | ||
216 | + <if test="queryData.currentTime !=null"> | ||
217 | + <![CDATA[AND timediff(#{queryData.currentTime},a.lock_time) > b.lock_timeout]]> | ||
218 | + </if> | ||
219 | + </if> | ||
220 | + </where> | ||
221 | + <![CDATA[LIMIT #{startIndex},#{endIndex}]]> | ||
222 | + </select> | ||
223 | + | ||
224 | + | ||
225 | + <update id="tryAddLock" parameterType="dtmsMessage" > | ||
226 | + <![CDATA[ | ||
227 | + update dtms_message | ||
228 | + set lock_status =1, | ||
229 | + lock_time=#{lockTime}, | ||
230 | + version = version + 1 | ||
231 | + where id=#{id} and version=#{version} and lock_status=0 and lock_time is null | ||
232 | + ]]> | ||
233 | + </update> | ||
234 | + | ||
235 | + <select id="selectLockedCount" parameterType="dtmsMessage" resultType="int"> | ||
236 | + <![CDATA[ | ||
237 | + select count(id) from dtms_message where id=#{id} and version=#{version} and lock_status=#{lockStatus} and lock_time=#{lockTime} | ||
238 | + ]]> | ||
239 | + </select> | ||
240 | + | ||
241 | + <update id="tryReleaseLock" parameterType="dtmsMessage" > | ||
242 | + <![CDATA[ | ||
243 | + update dtms_message | ||
244 | + set lock_status=0, | ||
245 | + lock_time=null, | ||
246 | + version = version + 1 | ||
247 | + where id=#{id} and version=#{version} and lock_status=#{lockStatus} and lock_time=#{lockTime} | ||
248 | + ]]> | ||
249 | + </update> | ||
250 | + | ||
251 | + <delete id="deleteByKeyAndVersion" parameterType="dtmsMessage" > | ||
252 | + delete from dtms_message where id=#{id} and version=#{version} | ||
253 | + </delete> | ||
254 | + | ||
255 | + <update id="reduceRetryCount" parameterType="dtmsMessage" > | ||
256 | + <![CDATA[ | ||
257 | + update dtms_message | ||
258 | + set wait_retry_num = #{waitRetryNum}, | ||
259 | + latest_consume_log = #{latestConsumeLog}, | ||
260 | + version = version + 1 | ||
261 | + where id=#{id} and version=#{version} | ||
262 | + ]]> | ||
263 | + </update> | ||
264 | + | ||
265 | + <update id="reduceRetryCountAndSetNextRuntime" parameterType="dtmsMessage" > | ||
266 | + <![CDATA[ | ||
267 | + update dtms_message | ||
268 | + set wait_retry_num = #{waitRetryNum}, | ||
269 | + runtime = #{runtime}, | ||
270 | + latest_consume_log = #{latestConsumeLog}, | ||
271 | + version = version + 1 | ||
272 | + where id=#{id} and version=#{version} | ||
273 | + ]]> | ||
274 | + </update> | ||
275 | + | ||
276 | +</mapper> | ||
0 | \ No newline at end of file | 277 | \ No newline at end of file |
dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessageConfig.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessageConfig.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
3 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
4 | +<mapper namespace="com.b2c.dtms.dao.DtmsMessageConfigDao"> | ||
5 | + | ||
6 | + <!-- dtms_message_config 所有查询列 --> | ||
7 | + <sql id="QUERY_COLUMN_LIST"> | ||
8 | + <![CDATA[id,msg_topic AS msgTopic,handler_type AS handlerType,handler,status,retry_step AS retryStep,retry_step_unit AS retryStepUnit,lock_timeout AS lockTimeout,memo]]> | ||
9 | + </sql> | ||
10 | + | ||
11 | + <!-- dtms_message_config 查询列来源表--> | ||
12 | + <sql id="QUERY_FROM_TABLE"><![CDATA[FROM dtms_message_config]]></sql> | ||
13 | + | ||
14 | + <!-- 全部条件(更多功能可以通过queryData扩展实现) --> | ||
15 | + <sql id="QUERY_WHERE_CLAUSE"> | ||
16 | + <where> | ||
17 | + <if test="id != null and id != ''"><![CDATA[AND id = #{id}]]></if> | ||
18 | + <if test="msgTopic != null and msgTopic != ''"><![CDATA[AND msg_topic = #{msgTopic}]]></if> | ||
19 | + <if test="handlerType != null and handlerType != ''"><![CDATA[AND handler_type = #{handlerType}]]></if> | ||
20 | + <if test="handler != null and handler != ''"><![CDATA[AND handler = #{handler}]]></if> | ||
21 | + <if test="status != null and status != ''"><![CDATA[AND status = #{status}]]></if> | ||
22 | + <if test="retryStep != null and retryStep != ''"><![CDATA[AND retry_step = #{retryStep}]]></if> | ||
23 | + <if test="retryStepUnit != null and retryStepUnit != ''"><![CDATA[AND retry_step_unit = #{retryStepUnit}]]></if> | ||
24 | + <if test="lockTimeout != null and lockTimeout != ''"><![CDATA[AND lock_timeout = #{lockTimeout}]]></if> | ||
25 | + <if test="memo != null and memo != ''"><![CDATA[AND memo = #{memo}]]></if> | ||
26 | + </where> | ||
27 | + </sql> | ||
28 | + | ||
29 | + <!-- 智能排序与分页 --> | ||
30 | + <sql id="QUERY_ORDER_LIMIT_CONDTION"> | ||
31 | + <if test="orderField != null and orderField != '' and orderFieldType != null and orderFieldType != ''"><![CDATA[ORDER BY ${orderField} ${orderFieldType}]]></if> | ||
32 | + <if test="startIndex != null and startIndex >= 0 and pageSize != null and pageSize > 0"><![CDATA[LIMIT #{startIndex},#{pageSize}]]></if> | ||
33 | + </sql> | ||
34 | + | ||
35 | + <!-- 更新列字段,只要不为NULL则更新,除开主键列 --> | ||
36 | + <sql id="UPDATE_COLUMN_SET"> | ||
37 | + <set> | ||
38 | + <if test="msgTopic != null"><![CDATA[msg_topic = #{msgTopic},]]></if> | ||
39 | + <if test="handlerType != null"><![CDATA[handler_type = #{handlerType},]]></if> | ||
40 | + <if test="handler != null"><![CDATA[handler = #{handler},]]></if> | ||
41 | + <if test="status != null"><![CDATA[status = #{status},]]></if> | ||
42 | + <if test="retryStep != null"><![CDATA[retry_step = #{retryStep},]]></if> | ||
43 | + <if test="retryStepUnit != null"><![CDATA[retry_step_unit = #{retryStepUnit},]]></if> | ||
44 | + <if test="lockTimeout != null"><![CDATA[lock_timeout = #{lockTimeout},]]></if> | ||
45 | + <if test="memo != null"><![CDATA[memo = #{memo},]]></if> | ||
46 | + </set> | ||
47 | + </sql> | ||
48 | + | ||
49 | + <!-- 插入dtms_message_config记录 --> | ||
50 | + <insert id="insertEntry" parameterType="dtmsMessageConfig" > | ||
51 | + <![CDATA[ | ||
52 | + INSERT INTO dtms_message_config (id,msg_topic,handler_type,handler,status,retry_step,retry_step_unit,lock_timeout,memo) | ||
53 | + VALUES (#{id},#{msgTopic},#{handlerType},#{handler},#{status},#{retryStep},#{retryStepUnit},#{lockTimeout},#{memo) | ||
54 | + ]]> | ||
55 | + </insert> | ||
56 | + | ||
57 | + <!-- 返回插入的编号,在事务开启状态下有效 --> | ||
58 | + <select id="lastSequence" resultType="int"><![CDATA[SELECT LAST_INSERT_ID() AS id]]></select> | ||
59 | + | ||
60 | + <!-- 删除记录,主键IN(array) --> | ||
61 | + <delete id="deleteByArrayKey" parameterType="java.lang.reflect.Array" > | ||
62 | + <![CDATA[DELETE FROM dtms_message_config WHERE id IN]]> | ||
63 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
64 | + <![CDATA[#{id}]]> | ||
65 | + </foreach> | ||
66 | + </delete> | ||
67 | + | ||
68 | + <!-- 删除,通过条件 --> | ||
69 | + <update id="deleteByCondtion" parameterType="dtmsMessageConfig" > | ||
70 | + <![CDATA[DELETE FROM dtms_message_config]]> | ||
71 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
72 | + </update> | ||
73 | + | ||
74 | + <!-- 修改记录通过主键 --> | ||
75 | + <update id="updateByKey" parameterType="dtmsMessageConfig" > | ||
76 | + <![CDATA[UPDATE dtms_message_config]]> | ||
77 | + <include refid="UPDATE_COLUMN_SET"/> | ||
78 | + <![CDATA[WHERE id = #{id}]]> | ||
79 | + </update> | ||
80 | + | ||
81 | + <!-- 查询,通过主键IN(array) --> | ||
82 | + <select id="selectEntryArray" parameterType="java.lang.reflect.Array" resultType="dtmsMessageConfig"> | ||
83 | + <![CDATA[SELECT]]> | ||
84 | + <include refid="QUERY_COLUMN_LIST"/> | ||
85 | + <include refid="QUERY_FROM_TABLE"/> | ||
86 | + <![CDATA[WHERE id IN]]> | ||
87 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
88 | + <![CDATA[#{id}]]> | ||
89 | + </foreach> | ||
90 | + </select> | ||
91 | + | ||
92 | + <!-- 查询,通过条件 --> | ||
93 | + <select id="selectEntryList" parameterType="dtmsMessageConfig" resultType="dtmsMessageConfig"> | ||
94 | + <![CDATA[SELECT]]> | ||
95 | + <include refid="QUERY_COLUMN_LIST"/> | ||
96 | + <include refid="QUERY_FROM_TABLE"/> | ||
97 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
98 | + <include refid="QUERY_ORDER_LIMIT_CONDTION"/> | ||
99 | + </select> | ||
100 | + | ||
101 | + <!-- 总数查询,通过条件 --> | ||
102 | + <select id="selectEntryListCount" parameterType="dtmsMessageConfig" resultType="int"> | ||
103 | + <![CDATA[SELECT COUNT(id) AS dataCount]]> | ||
104 | + <include refid="QUERY_FROM_TABLE"/> | ||
105 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
106 | + </select> | ||
107 | + | ||
108 | + <!-- 其它SQL语句 --> | ||
109 | + | ||
110 | + | ||
111 | +</mapper> | ||
0 | \ No newline at end of file | 112 | \ No newline at end of file |
dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessageException.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessageException.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
3 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
4 | +<mapper namespace="com.b2c.dtms.dao.DtmsMessageExceptionDao"> | ||
5 | + | ||
6 | + <!-- dtms_message_exception 所有查询列 --> | ||
7 | + <sql id="QUERY_COLUMN_LIST"> | ||
8 | + <![CDATA[id, | ||
9 | + msg_id AS msgId, | ||
10 | + biz_id AS bizId, | ||
11 | + status, | ||
12 | + topic, | ||
13 | + content, | ||
14 | + memo, | ||
15 | + create_time AS createTime, | ||
16 | + exception_time AS exceptionTime, | ||
17 | + exception_memo AS exceptionMemo, | ||
18 | + latest_consume_log AS latestConsumeLog, | ||
19 | + process_user_id AS processUserId, | ||
20 | + process_user_name AS processUserName, | ||
21 | + process_memo AS processMemo, | ||
22 | + process_time AS processTime]]> | ||
23 | + </sql> | ||
24 | + | ||
25 | + <!-- dtms_message_exception 查询列来源表--> | ||
26 | + <sql id="QUERY_FROM_TABLE"><![CDATA[FROM dtms_message_exception]]></sql> | ||
27 | + | ||
28 | + <!-- 全部条件(更多功能可以通过queryData扩展实现) --> | ||
29 | + <sql id="QUERY_WHERE_CLAUSE"> | ||
30 | + <where> | ||
31 | + <if test="id != null and id != ''"><![CDATA[AND id = #{id}]]></if> | ||
32 | + <if test="msgId != null and msgId != ''"><![CDATA[AND msg_id = #{msgId}]]></if> | ||
33 | + <if test="bizId != null and bizId != ''"><![CDATA[AND biz_id = #{bizId}]]></if> | ||
34 | + <if test="status != null and status != ''"><![CDATA[AND status = #{status}]]></if> | ||
35 | + <if test="topic != null and topic != ''"><![CDATA[AND topic = #{topic}]]></if> | ||
36 | + <if test="content != null and content != ''"><![CDATA[AND content = #{content}]]></if> | ||
37 | + <if test="memo != null and memo != ''"><![CDATA[AND memo = #{memo}]]></if> | ||
38 | + <if test="createTime != null and createTime != ''"><![CDATA[AND create_time = #{createTime}]]></if> | ||
39 | + <if test="exceptionTime != null and exceptionTime != ''"><![CDATA[AND exception_time = #{exceptionTime}]]></if> | ||
40 | + <if test="exceptionMemo != null and exceptionMemo != ''"><![CDATA[AND exception_memo = #{exceptionMemo}]]></if> | ||
41 | + <if test="processUserId != null and processUserId != ''"><![CDATA[AND process_user_id = #{processUserId}]]></if> | ||
42 | + <if test="processUserName != null and processUserName != ''"><![CDATA[AND process_user_name = #{processUserName}]]></if> | ||
43 | + <if test="processMemo != null and processMemo != ''"><![CDATA[AND process_memo = #{processMemo}]]></if> | ||
44 | + <if test="processTime != null and processTime != ''"><![CDATA[AND process_time = #{processTime}]]></if> | ||
45 | + </where> | ||
46 | + </sql> | ||
47 | + | ||
48 | + <!-- 智能排序与分页 --> | ||
49 | + <sql id="QUERY_ORDER_LIMIT_CONDTION"> | ||
50 | + <if test="orderField != null and orderField != '' and orderFieldType != null and orderFieldType != ''"><![CDATA[ORDER BY ${orderField} ${orderFieldType}]]></if> | ||
51 | + <if test="startIndex != null and startIndex >= 0 and pageSize != null and pageSize > 0"><![CDATA[LIMIT #{startIndex},#{pageSize}]]></if> | ||
52 | + </sql> | ||
53 | + | ||
54 | + <!-- 更新列字段,只要不为NULL则更新,除开主键列 --> | ||
55 | + <sql id="UPDATE_COLUMN_SET"> | ||
56 | + <set> | ||
57 | + <if test="msgId != null"><![CDATA[msg_id = #{msgId},]]></if> | ||
58 | + <if test="bizId != null"><![CDATA[biz_id = #{bizId},]]></if> | ||
59 | + <if test="status != null"><![CDATA[status = #{status},]]></if> | ||
60 | + <if test="topic != null"><![CDATA[topic = #{topic},]]></if> | ||
61 | + <if test="content != null"><![CDATA[content = #{content},]]></if> | ||
62 | + <if test="memo != null"><![CDATA[memo = #{memo},]]></if> | ||
63 | + <if test="createTime != null"><![CDATA[create_time = #{createTime},]]></if> | ||
64 | + <if test="exceptionTime != null"><![CDATA[exception_time = #{exceptionTime},]]></if> | ||
65 | + <if test="exceptionMemo != null"><![CDATA[exception_memo = #{exceptionMemo},]]></if> | ||
66 | + <if test="latestConsumeLog != null"><![CDATA[latest_consume_log = #{latestConsumeLog},]]></if> | ||
67 | + <if test="processUserId != null"><![CDATA[process_user_id = #{processUserId},]]></if> | ||
68 | + <if test="processUserName != null"><![CDATA[process_user_name = #{processUserName},]]></if> | ||
69 | + <if test="processMemo != null"><![CDATA[process_memo = #{processMemo},]]></if> | ||
70 | + <if test="processTime != null"><![CDATA[process_time = #{processTime},]]></if> | ||
71 | + | ||
72 | + </set> | ||
73 | + </sql> | ||
74 | + | ||
75 | + <!-- 插入dtms_message_exception记录 --> | ||
76 | + <insert id="insertEntry" parameterType="dtmsMessageException" > | ||
77 | + <![CDATA[ | ||
78 | + INSERT INTO dtms_message_exception (id,msg_id,biz_id,status,topic,content,memo,create_time,exception_time,exception_memo,latest_consume_log,process_user_id,process_user_name,process_memo,process_time) | ||
79 | + VALUES (#{id},#{msgId},#{bizId},#{status},#{topic},#{content},#{memo},#{createTime},#{exceptionTime},#{exceptionMemo},#{latestConsumeLog},#{processUserId},#{processUserName},#{processMemo},#{processTime}) | ||
80 | + ]]> | ||
81 | + </insert> | ||
82 | + | ||
83 | + <!-- 返回插入的编号,在事务开启状态下有效 --> | ||
84 | + <select id="lastSequence" resultType="int"><![CDATA[SELECT LAST_INSERT_ID() AS id]]></select> | ||
85 | + | ||
86 | + <!-- 删除记录,主键IN(array) --> | ||
87 | + <delete id="deleteByArrayKey" parameterType="java.lang.reflect.Array" > | ||
88 | + <![CDATA[DELETE FROM dtms_message_exception WHERE id IN]]> | ||
89 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
90 | + <![CDATA[#{id}]]> | ||
91 | + </foreach> | ||
92 | + </delete> | ||
93 | + | ||
94 | + <!-- 删除,通过条件 --> | ||
95 | + <update id="deleteByCondtion" parameterType="dtmsMessageException" > | ||
96 | + <![CDATA[DELETE FROM dtms_message_exception]]> | ||
97 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
98 | + </update> | ||
99 | + | ||
100 | + <!-- 修改记录通过主键 --> | ||
101 | + <update id="updateByKey" parameterType="dtmsMessageException" > | ||
102 | + <![CDATA[UPDATE dtms_message_exception]]> | ||
103 | + <include refid="UPDATE_COLUMN_SET"/> | ||
104 | + <![CDATA[WHERE id = #{id}]]> | ||
105 | + </update> | ||
106 | + | ||
107 | + <!-- 查询,通过主键IN(array) --> | ||
108 | + <select id="selectEntryArray" parameterType="java.lang.reflect.Array" resultType="dtmsMessageException"> | ||
109 | + <![CDATA[SELECT]]> | ||
110 | + <include refid="QUERY_COLUMN_LIST"/> | ||
111 | + <include refid="QUERY_FROM_TABLE"/> | ||
112 | + <![CDATA[WHERE id IN]]> | ||
113 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
114 | + <![CDATA[#{id}]]> | ||
115 | + </foreach> | ||
116 | + </select> | ||
117 | + | ||
118 | + <!-- 查询,通过条件 --> | ||
119 | + <select id="selectEntryList" parameterType="dtmsMessageException" resultType="dtmsMessageException"> | ||
120 | + <![CDATA[SELECT]]> | ||
121 | + <include refid="QUERY_COLUMN_LIST"/> | ||
122 | + <include refid="QUERY_FROM_TABLE"/> | ||
123 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
124 | + <include refid="QUERY_ORDER_LIMIT_CONDTION"/> | ||
125 | + </select> | ||
126 | + | ||
127 | + <!-- 总数查询,通过条件 --> | ||
128 | + <select id="selectEntryListCount" parameterType="dtmsMessageException" resultType="int"> | ||
129 | + <![CDATA[SELECT COUNT(id) AS dataCount]]> | ||
130 | + <include refid="QUERY_FROM_TABLE"/> | ||
131 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
132 | + </select> | ||
133 | + | ||
134 | + <!-- 其它SQL语句 --> | ||
135 | + | ||
136 | + | ||
137 | +</mapper> | ||
0 | \ No newline at end of file | 138 | \ No newline at end of file |
dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessageHistory.xml
0 → 100644
1 | +++ a/dtms-dao/src/main/resources/sqlmap/dtms/DtmsMessageHistory.xml | ||
1 | +<?xml version="1.0" encoding="UTF-8" ?> | ||
2 | +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | ||
3 | + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | ||
4 | +<mapper namespace="com.b2c.dtms.dao.DtmsMessageHistoryDao"> | ||
5 | + | ||
6 | + <!-- dtms_message_history 所有查询列 --> | ||
7 | + <sql id="QUERY_COLUMN_LIST"> | ||
8 | + <![CDATA[id,msg_id AS msgId,biz_id AS bizId,delay_seconds as delaySeconds,runtime,topic,content,memo,create_time AS createTime,wait_retry_num AS waitRetryNum,version,call_url AS callUrl,confirm_url AS confirmUrl,tag AS tag,history_time AS historyTime,history_memo AS historyMemo,lock_status AS lockStatus,lock_time AS lockTime,status,type,latest_consume_log AS latestConsumeLog]]> | ||
9 | + </sql> | ||
10 | + | ||
11 | + <!-- dtms_message_history 查询列来源表--> | ||
12 | + <sql id="QUERY_FROM_TABLE"><![CDATA[FROM dtms_message_history]]></sql> | ||
13 | + | ||
14 | + <!-- 全部条件(更多功能可以通过queryData扩展实现) --> | ||
15 | + <sql id="QUERY_WHERE_CLAUSE"> | ||
16 | + <where> | ||
17 | + <if test="id != null and id != ''"><![CDATA[AND id = #{id}]]></if> | ||
18 | + <if test="msgId != null and msgId != ''"><![CDATA[AND msg_id = #{msgId}]]></if> | ||
19 | + <if test="bizId != null and bizId != ''"><![CDATA[AND biz_id = #{bizId}]]></if> | ||
20 | + <if test="delaySeconds != null and delaySeconds != ''"><![CDATA[AND delay_seconds = #{delaySeconds}]]></if> | ||
21 | + <if test="runtime != null and runtime != ''"><![CDATA[AND runtime = #{runtime}]]></if> | ||
22 | + <if test="topic != null and topic != ''"><![CDATA[AND topic = #{topic}]]></if> | ||
23 | + <if test="content != null and content != ''"><![CDATA[AND content = #{content}]]></if> | ||
24 | + <if test="memo != null and memo != ''"><![CDATA[AND memo = #{memo}]]></if> | ||
25 | + <if test="createTime != null and createTime != ''"><![CDATA[AND create_time = #{createTime}]]></if> | ||
26 | + <if test="waitRetryNum != null and waitRetryNum != ''"><![CDATA[AND wait_retry_num = #{waitRetryNum}]]></if> | ||
27 | + <if test="version != null and version != ''"><![CDATA[AND version = #{version}]]></if> | ||
28 | + <if test="callUrl != null and callUrl != ''"><![CDATA[AND call_url = #{callUrl}]]></if> | ||
29 | + <if test="confirmUrl != null and confirmUrl != ''"><![CDATA[AND confirm_url = #{confirmUrl}]]></if> | ||
30 | + <if test="tag != null and tag != ''"><![CDATA[AND tag = #{tag}]]></if> | ||
31 | + <if test="historyTime != null and historyTime != ''"><![CDATA[AND history_time = #{historyTime}]]></if> | ||
32 | + <if test="historyMemo != null and historyMemo != ''"><![CDATA[AND history_memo = #{historyMemo}]]></if> | ||
33 | + <if test="lockStatus != null and lockStatus != ''"><![CDATA[AND lock_status = #{lockStatus}]]></if> | ||
34 | + <if test="lockTtime != null and lockTtime != ''"><![CDATA[AND lock_time = #{lockTtime}]]></if> | ||
35 | + <if test="status != null and status != ''"><![CDATA[AND status = #{status}]]></if> | ||
36 | + <if test="type != null and type != ''"><![CDATA[AND type = #{type}]]></if> | ||
37 | + </where> | ||
38 | + </sql> | ||
39 | + | ||
40 | + <!-- 智能排序与分页 --> | ||
41 | + <sql id="QUERY_ORDER_LIMIT_CONDTION"> | ||
42 | + <if test="orderField != null and orderField != '' and orderFieldType != null and orderFieldType != ''"><![CDATA[ORDER BY ${orderField} ${orderFieldType}]]></if> | ||
43 | + <if test="startIndex != null and startIndex >= 0 and pageSize != null and pageSize > 0"><![CDATA[LIMIT #{startIndex},#{pageSize}]]></if> | ||
44 | + </sql> | ||
45 | + | ||
46 | + <!-- 更新列字段,只要不为NULL则更新,除开主键列 --> | ||
47 | + <sql id="UPDATE_COLUMN_SET"> | ||
48 | + <set> | ||
49 | + <if test="msgId != null"><![CDATA[msg_id = #{msgId},]]></if> | ||
50 | + <if test="bizId != null"><![CDATA[biz_id = #{bizId},]]></if> | ||
51 | + <if test="delaySeconds != null"><![CDATA[delay_seconds = #{delaySeconds},]]></if> | ||
52 | + <if test="runtime != null"><![CDATA[runtime = #{runtime},]]></if> | ||
53 | + <if test="topic != null"><![CDATA[topic = #{topic},]]></if> | ||
54 | + <if test="content != null"><![CDATA[content = #{content},]]></if> | ||
55 | + <if test="memo != null"><![CDATA[memo = #{memo},]]></if> | ||
56 | + <if test="createTime != null"><![CDATA[create_time = #{createTime},]]></if> | ||
57 | + <if test="waitRetryNum != null"><![CDATA[wait_retry_num = #{waitRetryNum},]]></if> | ||
58 | + <if test="version != null"><![CDATA[version = #{version},]]></if> | ||
59 | + <if test="callUrl != null"><![CDATA[call_url = #{callUrl},]]></if> | ||
60 | + <if test="confirmUrl != null"><![CDATA[confirm_url = #{confirmUrl},]]></if> | ||
61 | + <if test="tag != null"><![CDATA[tag = #{tag},]]></if> | ||
62 | + <if test="historyTime != null"><![CDATA[history_time = #{historyTime},]]></if> | ||
63 | + <if test="historyMemo != null"><![CDATA[history_memo = #{historyMemo},]]></if> | ||
64 | + <if test="lockStatus != null"><![CDATA[lock_status = #{lockStatus},]]></if> | ||
65 | + <if test="lockTime != null"><![CDATA[lock_time = #{lockTime},]]></if> | ||
66 | + <if test="status != null"><![CDATA[status = #{status},]]></if> | ||
67 | + <if test="type != null"><![CDATA[type = #{type},]]></if> | ||
68 | + <if test="latestConsumeLog != null"><![CDATA[latest_consume_log = #{latestConsumeLog},]]></if> | ||
69 | + </set> | ||
70 | + </sql> | ||
71 | + | ||
72 | + <!-- 插入dtms_message_history记录 --> | ||
73 | + <insert id="insertEntry" parameterType="dtmsMessageHistory" > | ||
74 | + <![CDATA[ | ||
75 | + INSERT INTO dtms_message_history (id,msg_id,biz_id,delay_seconds,runtime,topic,content,memo,create_time,wait_retry_num,version,call_url,confirm_url,tag,history_time,history_memo,lock_status,lock_time,status,type,latest_consume_log) | ||
76 | + VALUES (#{id},#{msgId},#{bizId},#{delaySeconds},#{runtime},#{topic},#{content},#{memo},#{createTime},#{waitRetryNum},#{version},#{callUrl},#{confirmUrl},#{tag},#{historyTime},#{historyMemo},#{lockStatus},#{lockTime},#{status},#{type},#{latestConsumeLog}) | ||
77 | + ]]> | ||
78 | + </insert> | ||
79 | + | ||
80 | + <!-- 返回插入的编号,在事务开启状态下有效 --> | ||
81 | + <select id="lastSequence" resultType="int"><![CDATA[SELECT LAST_INSERT_ID() AS id]]></select> | ||
82 | + | ||
83 | + <!-- 删除记录,主键IN(array) --> | ||
84 | + <delete id="deleteByArrayKey" parameterType="java.lang.reflect.Array" > | ||
85 | + <![CDATA[DELETE FROM dtms_message_history WHERE id IN]]> | ||
86 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
87 | + <![CDATA[#{id}]]> | ||
88 | + </foreach> | ||
89 | + </delete> | ||
90 | + | ||
91 | + <!-- 删除,通过条件 --> | ||
92 | + <update id="deleteByCondtion" parameterType="dtmsMessageHistory" > | ||
93 | + <![CDATA[DELETE FROM dtms_message_history]]> | ||
94 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
95 | + </update> | ||
96 | + | ||
97 | + <!-- 修改记录通过主键 --> | ||
98 | + <update id="updateByKey" parameterType="dtmsMessageHistory" > | ||
99 | + <![CDATA[UPDATE dtms_message_history]]> | ||
100 | + <include refid="UPDATE_COLUMN_SET"/> | ||
101 | + <![CDATA[WHERE id = #{id}]]> | ||
102 | + </update> | ||
103 | + | ||
104 | + <!-- 查询,通过主键IN(array) --> | ||
105 | + <select id="selectEntryArray" parameterType="java.lang.reflect.Array" resultType="dtmsMessageHistory"> | ||
106 | + <![CDATA[SELECT]]> | ||
107 | + <include refid="QUERY_COLUMN_LIST"/> | ||
108 | + <include refid="QUERY_FROM_TABLE"/> | ||
109 | + <![CDATA[WHERE id IN]]> | ||
110 | + <foreach collection="array" item="id" open="(" separator="," close=")"> | ||
111 | + <![CDATA[#{id}]]> | ||
112 | + </foreach> | ||
113 | + </select> | ||
114 | + | ||
115 | + <!-- 查询,通过条件 --> | ||
116 | + <select id="selectEntryList" parameterType="dtmsMessageHistory" resultType="dtmsMessageHistory"> | ||
117 | + <![CDATA[SELECT]]> | ||
118 | + <include refid="QUERY_COLUMN_LIST"/> | ||
119 | + <include refid="QUERY_FROM_TABLE"/> | ||
120 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
121 | + <include refid="QUERY_ORDER_LIMIT_CONDTION"/> | ||
122 | + </select> | ||
123 | + | ||
124 | + <!-- 总数查询,通过条件 --> | ||
125 | + <select id="selectEntryListCount" parameterType="dtmsMessageHistory" resultType="int"> | ||
126 | + <![CDATA[SELECT COUNT(id) AS dataCount]]> | ||
127 | + <include refid="QUERY_FROM_TABLE"/> | ||
128 | + <include refid="QUERY_WHERE_CLAUSE"/> | ||
129 | + </select> | ||
130 | + | ||
131 | + <!-- 其它SQL语句 --> | ||
132 | + | ||
133 | + | ||
134 | +</mapper> | ||
0 | \ No newline at end of file | 135 | \ No newline at end of file |
dtms-domain/pom.xml
0 → 100644
1 | +++ a/dtms-domain/pom.xml | ||
1 | +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
2 | + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
3 | + <modelVersion>4.0.0</modelVersion> | ||
4 | + <parent> | ||
5 | + <groupId>com.b2c.dtms</groupId> | ||
6 | + <artifactId>dtms-parent</artifactId> | ||
7 | + <version>0.0.1-SNAPSHOT</version> | ||
8 | + </parent> | ||
9 | + <artifactId>dtms-domain</artifactId> | ||
10 | + | ||
11 | + <dependencies> | ||
12 | + <dependency> | ||
13 | + <groupId>org.springframework</groupId> | ||
14 | + <artifactId>spring-webmvc</artifactId> | ||
15 | + <exclusions> | ||
16 | + <exclusion> | ||
17 | + <groupId>commons-logging</groupId> | ||
18 | + <artifactId>commons-logging</artifactId> | ||
19 | + </exclusion> | ||
20 | + </exclusions> | ||
21 | + </dependency> | ||
22 | + <!-- google sets,maps --> | ||
23 | + <dependency> | ||
24 | + <groupId>com.google.guava</groupId> | ||
25 | + <artifactId>guava</artifactId> | ||
26 | + </dependency> | ||
27 | + <dependency> | ||
28 | + <groupId>org.projectlombok</groupId> | ||
29 | + <artifactId>lombok</artifactId> | ||
30 | + </dependency> | ||
31 | + <dependency> | ||
32 | + <groupId>commons-lang</groupId> | ||
33 | + <artifactId>commons-lang</artifactId> | ||
34 | + </dependency> | ||
35 | + <dependency> | ||
36 | + <groupId>org.springframework.data</groupId> | ||
37 | + <artifactId>spring-data-redis</artifactId> | ||
38 | + </dependency> | ||
39 | + <dependency> | ||
40 | + <groupId>com.alibaba</groupId> | ||
41 | + <artifactId>fastjson</artifactId> | ||
42 | + </dependency> | ||
43 | + <dependency> | ||
44 | + <groupId>${project.groupId}</groupId> | ||
45 | + <artifactId>dtms-client</artifactId> | ||
46 | + <version>${project.version}</version> | ||
47 | + </dependency> | ||
48 | + </dependencies> | ||
49 | +</project> | ||
0 | \ No newline at end of file | 50 | \ No newline at end of file |
dtms-domain/src/main/java/com/b2c/dtms/common/CommonConstants.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/CommonConstants.java | ||
1 | +package com.b2c.dtms.common; | ||
2 | + | ||
3 | +import java.util.Date; | ||
4 | + | ||
5 | +import com.b2c.dtms.common.tools.DateUtils; | ||
6 | + | ||
7 | +public class CommonConstants { | ||
8 | + | ||
9 | + public static final int COMMONS_ZERO_INT = 0; | ||
10 | + public static final int COMMONS_ONE_INT = 1; | ||
11 | + public static final String COMMONS_NINE_STR = "9"; | ||
12 | + public static final String COMMONS_FIVE_STR = "5"; | ||
13 | + | ||
14 | + /**前端匿名会员ID*/ | ||
15 | + public static final long ANONYMOUS_WEB_USER_ID = 999L; | ||
16 | + | ||
17 | + /**系统用户*/ | ||
18 | + public static final long SYSTEM_USER_ID = 9999999999999L; | ||
19 | + | ||
20 | + | ||
21 | + /**订单状态父节点ID*/ | ||
22 | + public static final String ORDER_STATUS_DICT_PID="DIC_ORDER_STATUS"; | ||
23 | +// /**工作流订单相关说明(描述/备注)关键字orderMemo*/ | ||
24 | + public static final String STATE_ORDER_MEMO_KEY="orderMemo"; | ||
25 | + | ||
26 | + public static final String notSupportActionErrorMsg = "当前状态不支持本动作"; | ||
27 | + public static final String updateOrderErrorMsg = "未更新到表数据,操作失败或者数据有更新,请刷新数据重试!"; | ||
28 | + public static final String unSelectOrderErrorMsg = "未查到关联订单数据,请确认订单是否存在"; | ||
29 | + public static final String unPayActionOrderErrorMsg = "未支付订单不能执行本操作"; | ||
30 | + public static final String commonOperationFailure="操作失败或者数据已发生改变,请刷新重试!"; | ||
31 | + public static final String unSelectSettleBillErrorMsg = "未查到关联结算单数据,请确认结算单是否存在"; | ||
32 | + public static final String SETTLE_SOURCE_NO_SEPARATOR=","; | ||
33 | + public static final String SUPPLY_ORDER_ID_SEPARATOR=","; | ||
34 | + public static final String HOT_LINE_1 = "HOT_LINE_1"; | ||
35 | + public static final String LINE_SEPARATOR="-"; | ||
36 | + public static final String CACHE_KEY_SEPARATOR="_"; | ||
37 | + | ||
38 | + public static final String CACHE_KEY_ORDERPRINTTEMPLETE="1n4j_orders" + CACHE_KEY_SEPARATOR +"orderPrintTemplete"; | ||
39 | + | ||
40 | + /**系统本次启动日期时间*/ | ||
41 | + public static final Date SYSTEM_START_TIME = DateUtils.getCurrentDate(); | ||
42 | + | ||
43 | + public static final String SuccTagKey="SuccTagKey"; | ||
44 | + public static final String FailTagKey="FailTagKey"; | ||
45 | + | ||
46 | + public static final String DtmsSuccID="DtmsSuccID"; | ||
47 | + public static final String DtmsFailID="DtmsFailID"; | ||
48 | + | ||
49 | + public static final String MARKET_CODE="1n4j_orders_market_code"; | ||
50 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/CommonUtils.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/CommonUtils.java | ||
1 | +package com.b2c.dtms.common; | ||
2 | + | ||
3 | +import org.springframework.web.context.ContextLoader; | ||
4 | +import org.springframework.web.context.WebApplicationContext; | ||
5 | + | ||
6 | +import com.b2c.dtms.common.exception.*; | ||
7 | + | ||
8 | +public class CommonUtils { | ||
9 | + | ||
10 | + public static void throwAppException(boolean expect,String msg) throws AppException { | ||
11 | + if (expect) { | ||
12 | + throw new AppException(msg); | ||
13 | + } | ||
14 | + } | ||
15 | + | ||
16 | + public static void throwAppException(Exception e) throws AppException { | ||
17 | + throw new AppException(e); | ||
18 | + } | ||
19 | + /** | ||
20 | + * expect=true时抛出DataErrorException异常 | ||
21 | + * @param expect | ||
22 | + * @param msg | ||
23 | + */ | ||
24 | + public static void throwDataError(boolean expect, String msg) throws DataErrorException { | ||
25 | + if (expect) { | ||
26 | + throw new DataErrorException(msg); | ||
27 | + } | ||
28 | + } | ||
29 | + | ||
30 | + public static void throwDataError(boolean expect,String code,String data, String msg) throws DataErrorException { | ||
31 | + if (expect) { | ||
32 | + throw new DataErrorException(code,data,msg); | ||
33 | + } | ||
34 | + } | ||
35 | + | ||
36 | + /** | ||
37 | + * expect=true时抛出NotAuthException异常 | ||
38 | + * @param expect | ||
39 | + * @param msg | ||
40 | + */ | ||
41 | + public static void throwNotAuth(boolean expect, String msg) throws NotAuthException { | ||
42 | + if (expect) { | ||
43 | + throw new NotAuthException(msg); | ||
44 | + } | ||
45 | + } | ||
46 | + | ||
47 | + /** | ||
48 | + * expect=true时抛出ParamErrorException异常 | ||
49 | + * @param expect | ||
50 | + * @param msg | ||
51 | + */ | ||
52 | + public static void throwParamError(boolean expect, String msg) throws ParamErrorException { | ||
53 | + if (expect) { | ||
54 | + throw new ParamErrorException(msg); | ||
55 | + } | ||
56 | + } | ||
57 | + | ||
58 | + public static void throwParamError(boolean expect,String code,String data, String msg) throws ParamErrorException { | ||
59 | + if (expect) { | ||
60 | + throw new ParamErrorException(code,data,msg); | ||
61 | + } | ||
62 | + } | ||
63 | + | ||
64 | + public static void throwParamError(boolean expect,String code, String msg) throws ParamErrorException { | ||
65 | + if (expect) { | ||
66 | + throw new ParamErrorException(code,msg); | ||
67 | + } | ||
68 | + } | ||
69 | + | ||
70 | + /** | ||
71 | + * expect=true时抛出RpcConnectException异常 | ||
72 | + * @param expect | ||
73 | + * @param msg | ||
74 | + */ | ||
75 | + public static void throwRpcConnect(boolean expect, String msg) throws RpcConnectException { | ||
76 | + if (expect) { | ||
77 | + throw new RpcConnectException(msg); | ||
78 | + } | ||
79 | + } | ||
80 | + /** | ||
81 | + * 抛出RpcConnectException异常 | ||
82 | + * @param e | ||
83 | + */ | ||
84 | + public static void throwRpcConnect(Exception e) throws RpcConnectException { | ||
85 | + throw new RpcConnectException(e); | ||
86 | + } | ||
87 | + /** | ||
88 | + * 抛出RpcConnectException异常 | ||
89 | + * @param msg | ||
90 | + * @param e | ||
91 | + */ | ||
92 | + public static void throwRpcConnect(String msg,Exception e) throws RpcConnectException { | ||
93 | + throw new RpcConnectException(msg,e); | ||
94 | + } | ||
95 | + | ||
96 | + public static void throwRpcConnect(String code,String message) throws RpcConnectException { | ||
97 | + throw new RpcConnectException(code,message); | ||
98 | + } | ||
99 | + | ||
100 | + public static void throwRpcConnect(String msg) throws RpcConnectException { | ||
101 | + throw new RpcConnectException(msg); | ||
102 | + } | ||
103 | + | ||
104 | + public static void throwRpcPayment(boolean expect, String msg) throws RpcPaymentException { | ||
105 | + if (expect) { | ||
106 | + throw new RpcPaymentException(msg); | ||
107 | + } | ||
108 | + } | ||
109 | + | ||
110 | + public static void throwRpcPayment(String code,String message) throws RpcPaymentException { | ||
111 | + throw new RpcPaymentException(code,message); | ||
112 | + } | ||
113 | + | ||
114 | + public static void throwRpcPayment(String msg,Exception e) throws RpcPaymentException { | ||
115 | + throw new RpcPaymentException(msg,e); | ||
116 | + } | ||
117 | + | ||
118 | + public static void throwRpcPayment(String msg) throws RpcPaymentException { | ||
119 | + throw new RpcPaymentException(msg); | ||
120 | + } | ||
121 | + | ||
122 | + public static void throwRpcGuard(boolean expect, String msg) throws RpcGuardException { | ||
123 | + if (expect) { | ||
124 | + throw new RpcGuardException(msg); | ||
125 | + } | ||
126 | + } | ||
127 | + | ||
128 | + public static void throwRpcGuard(String code,String message) throws RpcGuardException { | ||
129 | + throw new RpcGuardException(code,message); | ||
130 | + } | ||
131 | + | ||
132 | + public static void throwRpcGuard(String msg,Exception e) throws RpcGuardException { | ||
133 | + throw new RpcGuardException(msg,e); | ||
134 | + } | ||
135 | + | ||
136 | + public static void throwRpcGuard(String msg) throws RpcGuardException { | ||
137 | + throw new RpcGuardException(msg); | ||
138 | + } | ||
139 | + | ||
140 | + public static WebApplicationContext getWebApplicationContext() { | ||
141 | + return ContextLoader.getCurrentWebApplicationContext(); | ||
142 | + } | ||
143 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/DataDictionaryCode.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/DataDictionaryCode.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common; | ||
6 | + | ||
7 | +import com.b2c.dtms.publics.constants.PublicDataDictCode; | ||
8 | + | ||
9 | +/** | ||
10 | + * | ||
11 | + * <B>Description</B>数据字典代码 <br /> | ||
12 | + * <B>Copyright</B> Copyright (c) 2014 www.diligrp.com All rights reserved. <br /> | ||
13 | + * 本软件源代码版权归地利集团,未经许可不得任意复制与传播.<br /> | ||
14 | + * <B>Company</B> 地利集团 | ||
15 | + * @createTime 2014-6-16 下午03:37:14 | ||
16 | + * @author xiongdeqiang | ||
17 | + */ | ||
18 | +public final class DataDictionaryCode extends PublicDataDictCode { | ||
19 | + /** 代购服务项 */ | ||
20 | + public final static String DIC_PURCHASE_SERVICE_ITEM = "DIC_PURCHASE_SERVICE_ITEM"; | ||
21 | + /** 地利服务. */ | ||
22 | + public final static String DIC_DL_SERVICE = "DIC_DL_SERVICE"; | ||
23 | + | ||
24 | + /** 订单服务状态. */ | ||
25 | + public final static String DIC_ORDER_SERVER_STATUS = "DIC_ORDER_SERVER_STATUS"; | ||
26 | + | ||
27 | + /** 国家. */ | ||
28 | + public final static String DIC_COUNTRY = "DIC_COUNTRY"; | ||
29 | + | ||
30 | + /** 退款申请理由. */ | ||
31 | + public final static String DIC_REORDER_APPLY_REASON = "DIC_REORDER_APPLY_REASON"; | ||
32 | + | ||
33 | + /** 退款申请状态. */ | ||
34 | + public final static String DIC_REORDER_APPLY_STATUS = "DIC_REORDER_APPLY_STATUS"; | ||
35 | + | ||
36 | + /** 账单结算来源. */ | ||
37 | + public final static String DIC_BILL_SETTLE_SOURCE_CODE = "DIC_BILL_SETTLE_SOURCE_CODE"; | ||
38 | + | ||
39 | + /** 账单结算状态. */ | ||
40 | + public final static String DIC_BILL_SETTLE_STATUS = "DIC_BILL_SETTLE_STATUS"; | ||
41 | + | ||
42 | + /** 账单结算类型. */ | ||
43 | + public final static String DIC_BILL_SETTLE_TYPE = "DIC_BILL_SETTLE_TYPE"; | ||
44 | + | ||
45 | + /** 增值服务处理状态. */ | ||
46 | + public final static String DIC_SERVICE_PROCESS_STATUS = "DIC_SERVICE_PROCESS_STATUS"; | ||
47 | + | ||
48 | + /** 供应商类别 */ | ||
49 | + public final static String DIC_SUPPLIER_TYPE = "DIC_SUPPLIER_TYPE"; | ||
50 | + | ||
51 | + /** 性别类别 */ | ||
52 | + public final static String DIC_SIX_TYPE = "DIC_SIX_TYPE"; | ||
53 | + | ||
54 | + /** 识别卡类型 */ | ||
55 | + public final static String DIC_CARD_TYPE = "DIC_CARD_TYPE"; | ||
56 | + | ||
57 | + /** 供应单状态 */ | ||
58 | + public final static String DIC_SUPPLY_ORDER_STATUS = "DIC_SUPPLY_ORDER_STATUS"; | ||
59 | + | ||
60 | + /** [订单]订单状态枚举(前端) */ | ||
61 | + public final static String DIC_ORDER_WEB_STATUS = "DIC_ORDER_WEB_STATUS"; | ||
62 | + | ||
63 | + /** 买卖对接订单状态 */ | ||
64 | + public final static String DIC_THIRD_SALE_ORDER_BACKEND_STATUS = "DIC_THIRD_SALE_ORDER_BACKEND_STATUS"; | ||
65 | + | ||
66 | + /** 代购单前台状态 */ | ||
67 | + public final static String PURCHASE_ORDER_WEB_STATUS = "PURCHASE_ORDER_WEB_STATUS"; | ||
68 | + | ||
69 | + /** 自营/代销订单状态 */ | ||
70 | + public final static String DIC_SELF_AGENT_SALE_ORDER_BACKEND_STATUS = "DIC_SELF_AGENT_SALE_ORDER_BACKEND_STATUS"; | ||
71 | + | ||
72 | + /** 销售中心订单描述 */ | ||
73 | + public final static String DIC_THIRD_SALE_ORDER_BACKEND_DESCRIPTION = "DIC_THIRD_SALE_ORDER_BACKEND_DESCRIPTION"; | ||
74 | + | ||
75 | + /** 采购中心订单描述 */ | ||
76 | + public final static String DIC_SELF_AGENT_SALE_ORDER_DESCRIPTION = "DIC_SELF_AGENT_SALE_ORDER_DESCRIPTION"; | ||
77 | + | ||
78 | + /** 支付方式*/ | ||
79 | + public final static String DIC_PAY_WAY = "DIC_PAY_WAY"; | ||
80 | + | ||
81 | + /** 地利集团银行帐号 转账汇款及查看流水时使用*/ | ||
82 | + public final static String DIC_DL_BANK_ACCOUNT="DIC_DL_BANK_ACCOUNT"; | ||
83 | + | ||
84 | + /**结算单与转账汇款记录匹配状态*/ | ||
85 | + public final static String DIC_BILL_SETTLE_REMIT_MATCH_STATUS="DIC_BILL_SETTLE_REMIT_MATCH_STATUS"; | ||
86 | + | ||
87 | + /** 银行*/ | ||
88 | + public final static String DIC_BANK="DIC_BANK"; | ||
89 | + | ||
90 | + /** 发送短信模板*/ | ||
91 | + public final static String DIC_SMS_CONTENT="DIC_SMS_CONTENT"; | ||
92 | + | ||
93 | + public static final String DIC_CLAIMS_APPEAL_RESULTS = "DIC_CLAIMS_APPEAL_RESULTS"; | ||
94 | + /**用户渠道配置KEY*/ | ||
95 | + public static final String CLIENT_SOURCE = "CLIENT_SOURCE"; | ||
96 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/DateFormat.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/DateFormat.java | ||
1 | +package com.b2c.dtms.common; | ||
2 | + | ||
3 | + | ||
4 | +public class DateFormat { | ||
5 | + | ||
6 | + /** 所有地方可用*/ | ||
7 | + public final static String YYYY_MM_DD_HH_mm_ss="yyyy-MM-dd HH:mm:ss"; | ||
8 | + | ||
9 | + public final static String YYYY_MM_DD_HH_mm_ss_SSS="yyyy-MM-dd HH:mm:ss SSS"; | ||
10 | + | ||
11 | + /** Activiti流程中专用*/ | ||
12 | + public final static String YYYY_MM_DD_T_HH_mm_ss="yyyy-MM-dd'T'HH:mm:ss"; | ||
13 | + | ||
14 | + /** 所有地方可用*/ | ||
15 | + public final static String YYYY_MM_DD="yyyy-MM-dd"; | ||
16 | + | ||
17 | + public final static String CST="EEE MMM dd HH:mm:ss 'CST' yyyy"; | ||
18 | + | ||
19 | + public final static String YYYY_MM_DD_ZN_CH="yyyy年MM月dd日"; | ||
20 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/MessageCode.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/MessageCode.java | ||
1 | +package com.b2c.dtms.common; | ||
2 | + | ||
3 | +/** | ||
4 | + * 结果编码集;<br /> | ||
5 | + * 请保持与client包中的ResultCode类一至 <br /> | ||
6 | + * <B>Copyright</B> Copyright (c) 2014 www.diligrp.com All rights reserved. <br /> | ||
7 | + * 本软件源代码版权归地利集团,未经许可不得任意复制与传播.<br /> | ||
8 | + * <B>Company</B> 地利集团 | ||
9 | + */ | ||
10 | +public class MessageCode { | ||
11 | + public static final String OK="200";//成功 | ||
12 | + public static final String PARAMS_ERROR="1000";//输入参数错误(输入参数类型,值,null错误等) | ||
13 | + public static final String NOT_AUTH_ERROR="2000";//无权限(未登录,数据权限不满足,功能权限不满足等) | ||
14 | + public static final String DATA_ERROR="3000";//数据错误(未查询到数据,数据验证不通过等) | ||
15 | + public static final String APP_ERROR="5000";//服务器内部错误(系统错误,代码BUG,系统间调用超时等错误) | ||
16 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/SystemConfigCode.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/SystemConfigCode.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common; | ||
6 | + | ||
7 | +public interface SystemConfigCode { | ||
8 | + | ||
9 | + /** [订单]第三方订单买家最大允许提交退款申请次数 */ | ||
10 | + String Order_Third_Buyer_SubmitReOrder_Num="Order_Third_Buyer_SubmitReOrder_Num"; | ||
11 | + /** [订单]第三方订单买家最大允许提交理赔申请次数 */ | ||
12 | + String Order_Third_Buyer_SubmitClaimsOrder_Num="Order_Third_Buyer_SubmitClaimsOrder_Num"; | ||
13 | + /** [订单]第三方订单买家最大允许延期结算次数 */ | ||
14 | + String Order_Third_Buyer_Delay_Payment_Num="Order_Third_Buyer_Delay_Payment_Num"; | ||
15 | + /** [订单]第三方订单卖家最大允许延期结算次数 */ | ||
16 | + String Order_Third_Seller_Delay_Payment_Num="Order_Third_Seller_Delay_Payment_Num"; | ||
17 | + | ||
18 | + /** 线上付款/提货付款 待付款订单有效时间,单位:小时 */ | ||
19 | + String Order_PaymentWait_ValidIdle="Order_PaymentWait_ValidIdle"; | ||
20 | + /** 线下付款 待付款订单有效时间,单位:小时 */ | ||
21 | + String Order_Offline_PaymentWait_ValidIdle="Order_Offline_PaymentWait_ValidIdle"; | ||
22 | + /** 赊账付款 待审核订单有效时间,单位:小时 */ | ||
23 | + String Order_Credit_AuditWait_ValidIdle="Order_Credit_AuditWait_ValidIdle"; | ||
24 | + /** 线下付款,现场交易自动完成时间,单位:分钟 */ | ||
25 | + String Order_Spot_Delivered_ValidIdle="Order_Spot_Delivered_ValidIdle"; | ||
26 | + | ||
27 | + /** 待分单超时告警时间,单位:小时 */ | ||
28 | + String Order_DivideWait_ValidIdle="Order_DivideWait_ValidIdle"; | ||
29 | + | ||
30 | + /** 第三方订单-待提货-自动结算等待时间,单位:小时 */ | ||
31 | + String Order_Third_DeliveredWait_ValidIdle="Order_Third_DeliveredWait_ValidIdle"; | ||
32 | + /** 第三方订单-待收货-自动结算等待时间,单位:小时 */ | ||
33 | + String Order_Third_DeliveredWait_Receive_ValidIdle="Order_Third_DeliveredWait_Receive_ValidIdle"; | ||
34 | + /** 第三方订单延期结算默认天数,单位:天 */ | ||
35 | + String Order_Third_delayClearing_DefaultDay="Order_Third_delayClearing_DefaultDay"; | ||
36 | + | ||
37 | + /** 第三方订单付款后多少小时未发货,短信通知卖家,单位:小时 */ | ||
38 | + String Order_Third_Not_Send_Hint_ValidIdle="Order_Third_Not_Send_Hint_ValidIdle"; | ||
39 | + | ||
40 | + /** 市场配送列表 json格式*/ | ||
41 | + String Order_Third_Market_Delivery = "Order_Third_Market_Delivery"; | ||
42 | + | ||
43 | + /** 第三方订单-上门自提 线下付款 订单自动结算时间到达前多少个小时 发送短信提醒 单位:小时*/ | ||
44 | + String Order_Third_Self_Offline_AutoDelivered_Hint_ValidIdle="Order_Third_Self_Offline_AutoDelivered_Hint_ValidIdle"; | ||
45 | + /** 第三方订单-上门自提 线上付款 订单自动结算时间到达前多少个小时 发送短信提醒 单位:小时*/ | ||
46 | + String Order_Third_Self_Online_AutoDelivered_Hint_ValidIdle="Order_Third_Self_Online_AutoDelivered_Hint_ValidIdle"; | ||
47 | + /** 第三方订单-送货上门 线下付款 订单自动结算时间到达前多少个小时 发送短信提醒 单位:小时*/ | ||
48 | + String Order_Third_Delivery_Offline_AutoDelivered_Hint_ValidIdle="Order_Third_Delivery_Offline_AutoDelivered_Hint_ValidIdle"; | ||
49 | + /** 第三方订单-送货上门 线上付款 订单自动结算时间到达前多少个小时 发送短信提醒 单位:小时*/ | ||
50 | + String Order_Third_Delivery_Online_AutoDelivered_Hint_ValidIdle="Order_Third_Delivery_Online_AutoDelivered_Hint_ValidIdle"; | ||
51 | + | ||
52 | + | ||
53 | + /** 第三方订单-订单自动通过退款申请有效时间(单位:小时) */ | ||
54 | + String Order_Third_AutoRefundPass_Wait_ValidIdle="Order_Third_AutoRefundPass_Wait_ValidIdle"; | ||
55 | + | ||
56 | + | ||
57 | + /** 财务复核,0:不需要财务复核;1:需要财务复核*/ | ||
58 | + String Financial_Review="Financial_Review "; | ||
59 | + | ||
60 | + /** 订单确认提货后等待评论有效时间,单位:小时 */ | ||
61 | + String Order_Auto_Commented_ValidIdle="Order_Auto_Commented_ValidIdle"; | ||
62 | + | ||
63 | + /** 订单提交成功,支付方式为(线上/线下付款)且超过N小时未支付提醒,单位:小时 */ | ||
64 | + String Order_PaymentWait_Prompt_ValidIdle="Order_PaymentWait_Prompt_ValidIdle"; | ||
65 | + | ||
66 | + /** 服务热线*/ | ||
67 | + String Client_Service_Hot_Line = "Client_Service_Hot_Line"; | ||
68 | + | ||
69 | + /** 农丰网RSA私钥 */ | ||
70 | + String NONG12_RSA_PRIVATE_KEY="NONG12_RSA_PRIVATE_KEY"; | ||
71 | + | ||
72 | + /** 农丰网RSA公钥 */ | ||
73 | + String NONG12_RSA_PUBLIC_KEY="NONG12_RSA_PUBLIC_KEY"; | ||
74 | + | ||
75 | + /** 支付RSA公钥 */ | ||
76 | + String PAY_RSA_PUBLIC_KEY="PAY_RSA_PUBLIC_KEY"; | ||
77 | + | ||
78 | + /** 订单的佣金率 */ | ||
79 | + String ORDER_BROKERAGE_RATE="ORDER_BROKERAGE_RATE"; | ||
80 | + /** 订单的佣金最大抽取值 */ | ||
81 | + String ORDER_BROKERAGE_MAX_VALUE="ORDER_BROKERAGE_MAX_VALUE"; | ||
82 | + /** 订单完成后允许提交理赔申请的最大小时数(单位:小时) */ | ||
83 | + String AFTER_RECEIVE_CAN_APPLY_CLAIMS_HOURS = "AFTER_RECEIVE_CAN_APPLY_CLAIMS_HOURS"; | ||
84 | + /** 触发自动审核理赔单小时数(单位:小时) */ | ||
85 | + String AUTO_AUDIT_CLAIMS_TRIGGER_HOURS = "AUTO_AUDIT_CLAIMS_TRIGGER_HOURS"; | ||
86 | + /** 触发禁用理赔申诉小时数(单位:小时) */ | ||
87 | + String AUTO_DISABLE_CLAIMS_APPEAL_TRIGGER_HOURS = "AUTO_DISABLE_CLAIMS_APPEAL_TRIGGER_HOURS"; | ||
88 | + | ||
89 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/AppException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/AppException.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common.exception; | ||
6 | + | ||
7 | +/** | ||
8 | + * AppException | ||
9 | + * @author dev-center | ||
10 | + * @since 2014-05-15 | ||
11 | + */ | ||
12 | +public class AppException extends RuntimeException{ | ||
13 | + private static final long serialVersionUID = 1L; | ||
14 | + public static final String CODE_NEGLECTABLE = "201"; | ||
15 | + private String code; | ||
16 | + private String errorData; | ||
17 | + public AppException() { | ||
18 | + super(); | ||
19 | + } | ||
20 | + | ||
21 | + public AppException(String message) { | ||
22 | + super(message); | ||
23 | + } | ||
24 | + | ||
25 | + public AppException(String message, Throwable cause) { | ||
26 | + super(message, cause); | ||
27 | + } | ||
28 | + | ||
29 | + public AppException(Throwable cause) { | ||
30 | + super(cause); | ||
31 | + } | ||
32 | + | ||
33 | + public AppException(String code, String message) { | ||
34 | + super(message); | ||
35 | + this.code=code; | ||
36 | + } | ||
37 | + | ||
38 | + public AppException(String code, String errorData,String message) { | ||
39 | + super(message); | ||
40 | + this.code=code; | ||
41 | + this.errorData=errorData; | ||
42 | + } | ||
43 | + | ||
44 | + | ||
45 | + public String getCode() { | ||
46 | + return code; | ||
47 | + } | ||
48 | + | ||
49 | + public void setCode(String code) { | ||
50 | + this.code = code; | ||
51 | + } | ||
52 | + | ||
53 | + | ||
54 | + public String getErrorData() { | ||
55 | + return errorData; | ||
56 | + } | ||
57 | + | ||
58 | + | ||
59 | + public void setErrorData(String errorData) { | ||
60 | + this.errorData = errorData; | ||
61 | + } | ||
62 | + | ||
63 | + @Override | ||
64 | + public String toString() { | ||
65 | + return "AppException [code=" + getCode() + ", errorData=" | ||
66 | + + getErrorData() + ", message=" + getMessage() | ||
67 | + + ", cause=" + getCause() + "]"; | ||
68 | + } | ||
69 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/DataErrorException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/DataErrorException.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common.exception; | ||
6 | + | ||
7 | + | ||
8 | +/** | ||
9 | + * AppException | ||
10 | + * @author dev-center | ||
11 | + * @since 2014-05-15 | ||
12 | + */ | ||
13 | +public class DataErrorException extends AppException{ | ||
14 | + private static final long serialVersionUID = 1L; | ||
15 | + public DataErrorException() { | ||
16 | + super(); | ||
17 | + } | ||
18 | + | ||
19 | + public DataErrorException(String message) { | ||
20 | + super(message); | ||
21 | + } | ||
22 | + | ||
23 | + public DataErrorException(String message, Throwable cause) { | ||
24 | + super(message, cause); | ||
25 | + } | ||
26 | + | ||
27 | + public DataErrorException(Throwable cause) { | ||
28 | + super(cause); | ||
29 | + } | ||
30 | + | ||
31 | + public DataErrorException(String code, String errorData,String message) { | ||
32 | + super(code,errorData,message); | ||
33 | + } | ||
34 | + | ||
35 | + @Override | ||
36 | + public String toString() { | ||
37 | + return "DataErrorException [code=" + getCode() + ", errorData=" | ||
38 | + + getErrorData() + ", message=" + getMessage() | ||
39 | + + ", cause=" + getCause() + "]"; | ||
40 | + } | ||
41 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/DtmsException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/DtmsException.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common.exception; | ||
6 | + | ||
7 | +/** | ||
8 | + * AppException | ||
9 | + * @author dev-center | ||
10 | + * @since 2014-05-15 | ||
11 | + */ | ||
12 | +public class DtmsException extends RuntimeException{ | ||
13 | + private static final long serialVersionUID = 1L; | ||
14 | + private String code; | ||
15 | + public DtmsException() { | ||
16 | + super(); | ||
17 | + } | ||
18 | + | ||
19 | + public DtmsException(String message) { | ||
20 | + super(message); | ||
21 | + } | ||
22 | + | ||
23 | + public DtmsException(String message, Throwable cause) { | ||
24 | + super(message, cause); | ||
25 | + } | ||
26 | + | ||
27 | + public DtmsException(Throwable cause) { | ||
28 | + super(cause); | ||
29 | + } | ||
30 | + | ||
31 | + public DtmsException(String code, String message) { | ||
32 | + super(message); | ||
33 | + this.code=code; | ||
34 | + } | ||
35 | + | ||
36 | + public String getCode() { | ||
37 | + return code; | ||
38 | + } | ||
39 | + | ||
40 | + public void setCode(String code) { | ||
41 | + this.code = code; | ||
42 | + } | ||
43 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/NotAuthException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/NotAuthException.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common.exception; | ||
6 | + | ||
7 | +/** | ||
8 | + * AppException | ||
9 | + * @author dev-center | ||
10 | + * @since 2014-05-15 | ||
11 | + */ | ||
12 | +public class NotAuthException extends AppException{ | ||
13 | + private static final long serialVersionUID = 1L; | ||
14 | + public NotAuthException() { | ||
15 | + super(); | ||
16 | + } | ||
17 | + | ||
18 | + public NotAuthException(String message) { | ||
19 | + super(message); | ||
20 | + } | ||
21 | + | ||
22 | + public NotAuthException(String message, Throwable cause) { | ||
23 | + super(message, cause); | ||
24 | + } | ||
25 | + | ||
26 | + public NotAuthException(Throwable cause) { | ||
27 | + super(cause); | ||
28 | + } | ||
29 | + | ||
30 | + public NotAuthException(String code, String errorData,String message) { | ||
31 | + super(code,errorData,message); | ||
32 | + } | ||
33 | + | ||
34 | + @Override | ||
35 | + public String toString() { | ||
36 | + return "NotAuthException [code=" + getCode() + ", errorData=" | ||
37 | + + getErrorData() + ", message=" + getMessage() | ||
38 | + + ", cause=" + getCause() + "]"; | ||
39 | + } | ||
40 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/ParamErrorException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/ParamErrorException.java | ||
1 | +/* | ||
2 | + * Copyright (c) 2014 www.diligrp.com All rights reserved. | ||
3 | + * 本软件源代码版权归----所有,未经许可不得任意复制与传播. | ||
4 | + */ | ||
5 | +package com.b2c.dtms.common.exception; | ||
6 | + | ||
7 | +/** | ||
8 | + * AppException | ||
9 | + * @author dev-center | ||
10 | + * @since 2014-05-15 | ||
11 | + */ | ||
12 | +public class ParamErrorException extends AppException{ | ||
13 | + private static final long serialVersionUID = 1L; | ||
14 | + public ParamErrorException() { | ||
15 | + super(); | ||
16 | + } | ||
17 | + | ||
18 | + public ParamErrorException(String message) { | ||
19 | + super(message); | ||
20 | + } | ||
21 | + | ||
22 | + public ParamErrorException(String message, Throwable cause) { | ||
23 | + super(message, cause); | ||
24 | + } | ||
25 | + | ||
26 | + public ParamErrorException(Throwable cause) { | ||
27 | + super(cause); | ||
28 | + } | ||
29 | + | ||
30 | + public ParamErrorException(String code, String message) { | ||
31 | + super(code,message); | ||
32 | + } | ||
33 | + | ||
34 | + public ParamErrorException(String code, String errorData,String message) { | ||
35 | + super(code,errorData,message); | ||
36 | + } | ||
37 | + | ||
38 | + @Override | ||
39 | + public String toString() { | ||
40 | + return "ParamErrorException [code=" + getCode() + ", errorData=" | ||
41 | + + getErrorData() + ", message=" + getMessage() | ||
42 | + + ", cause=" + getCause() + "]"; | ||
43 | + } | ||
44 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/RpcConnectException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/RpcConnectException.java | ||
1 | +package com.b2c.dtms.common.exception; | ||
2 | + | ||
3 | +public class RpcConnectException extends AppException { | ||
4 | + | ||
5 | + /** | ||
6 | + * 接口调用异常 | ||
7 | + */ | ||
8 | + private static final long serialVersionUID = 1L; | ||
9 | + public RpcConnectException() { | ||
10 | + super(); | ||
11 | + } | ||
12 | + | ||
13 | + public RpcConnectException(String message) { | ||
14 | + super(message); | ||
15 | + } | ||
16 | + | ||
17 | + public RpcConnectException(String message, Throwable cause) { | ||
18 | + super(message, cause); | ||
19 | + } | ||
20 | + | ||
21 | + public RpcConnectException(Throwable cause) { | ||
22 | + super(cause); | ||
23 | + } | ||
24 | + | ||
25 | + | ||
26 | + public RpcConnectException(String code,String message) { | ||
27 | + super(code,message); | ||
28 | + } | ||
29 | + | ||
30 | + public RpcConnectException(String code, String errorData,String message) { | ||
31 | + super(code,errorData,message); | ||
32 | + } | ||
33 | + | ||
34 | + @Override | ||
35 | + public String toString() { | ||
36 | + return "RpcConnectException [code=" + getCode() + ", errorData=" | ||
37 | + + getErrorData() + ", message=" + getMessage() | ||
38 | + + ", cause=" + getCause() + "]"; | ||
39 | + } | ||
40 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/RpcGuardException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/RpcGuardException.java | ||
1 | +package com.b2c.dtms.common.exception; | ||
2 | + | ||
3 | +public class RpcGuardException extends RpcConnectException { | ||
4 | + | ||
5 | + private static final long serialVersionUID = 1L; | ||
6 | + | ||
7 | + public RpcGuardException() { | ||
8 | + super(); | ||
9 | + } | ||
10 | + | ||
11 | + public RpcGuardException(String message) { | ||
12 | + super(message); | ||
13 | + } | ||
14 | + | ||
15 | + public RpcGuardException(String message, Throwable cause) { | ||
16 | + super(message, cause); | ||
17 | + } | ||
18 | + | ||
19 | + public RpcGuardException(Throwable cause) { | ||
20 | + super(cause); | ||
21 | + } | ||
22 | + | ||
23 | + | ||
24 | + public RpcGuardException(String code,String message) { | ||
25 | + super(code,message); | ||
26 | + } | ||
27 | + | ||
28 | + public RpcGuardException(String code, String data,String message) { | ||
29 | + super(code,data,message); | ||
30 | + } | ||
31 | + | ||
32 | + @Override | ||
33 | + public String toString() { | ||
34 | + return "RpcGuardException [code=" + getCode() + ", errorData=" | ||
35 | + + getErrorData() + ", message=" + getMessage() | ||
36 | + + ", cause=" + getCause() + "]"; | ||
37 | + } | ||
38 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/RpcPaymentException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/RpcPaymentException.java | ||
1 | +package com.b2c.dtms.common.exception; | ||
2 | + | ||
3 | +public class RpcPaymentException extends RpcConnectException { | ||
4 | + | ||
5 | + private static final long serialVersionUID = 1L; | ||
6 | + | ||
7 | + public RpcPaymentException() { | ||
8 | + super(); | ||
9 | + } | ||
10 | + | ||
11 | + public RpcPaymentException(String message) { | ||
12 | + super(message); | ||
13 | + } | ||
14 | + | ||
15 | + public RpcPaymentException(String message, Throwable cause) { | ||
16 | + super(message, cause); | ||
17 | + } | ||
18 | + | ||
19 | + public RpcPaymentException(Throwable cause) { | ||
20 | + super(cause); | ||
21 | + } | ||
22 | + | ||
23 | + | ||
24 | + public RpcPaymentException(String code,String message) { | ||
25 | + super(code,message); | ||
26 | + } | ||
27 | + | ||
28 | + public RpcPaymentException(String code, String data,String message) { | ||
29 | + super(code,data,message); | ||
30 | + } | ||
31 | + | ||
32 | + @Override | ||
33 | + public String toString() { | ||
34 | + return "RpcPaymentException [code=" + getCode() + ", errorData=" | ||
35 | + + getErrorData() + ", message=" + getMessage() | ||
36 | + + ", cause=" + getCause() + "]"; | ||
37 | + } | ||
38 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/exception/WebException.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/exception/WebException.java | ||
1 | +package com.b2c.dtms.common.exception; | ||
2 | + | ||
3 | +public class WebException extends AppException{ | ||
4 | + private static final long serialVersionUID = -4573550295666184287L; | ||
5 | + | ||
6 | + public WebException(String msg){ | ||
7 | + super(msg); | ||
8 | + } | ||
9 | + | ||
10 | + public WebException(Throwable cause){ | ||
11 | + super(cause); | ||
12 | + } | ||
13 | + | ||
14 | + public WebException(String msg, Throwable cause){ | ||
15 | + super(msg, cause); | ||
16 | + } | ||
17 | + | ||
18 | + public WebException(String code, String data,String message) { | ||
19 | + super(code,data,message); | ||
20 | + } | ||
21 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/sql/OrderFieldType.java
0 → 100644
dtms-domain/src/main/java/com/b2c/dtms/common/tools/Base64.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/tools/Base64.java | ||
1 | +package com.b2c.dtms.common.tools; | ||
2 | + | ||
3 | +import org.apache.commons.lang.StringUtils; | ||
4 | + | ||
5 | +/** | ||
6 | + * Base64编码 | ||
7 | + * | ||
8 | + */ | ||
9 | +public final class Base64 { | ||
10 | + | ||
11 | + static private final int BASELENGTH = 128; | ||
12 | + static private final int LOOKUPLENGTH = 64; | ||
13 | + static private final int TWENTYFOURBITGROUP = 24; | ||
14 | + static private final int EIGHTBIT = 8; | ||
15 | + static private final int SIXTEENBIT = 16; | ||
16 | + static private final int FOURBYTE = 4; | ||
17 | + static private final int SIGN = -128; | ||
18 | + static private final char PAD = '='; | ||
19 | + static private final boolean fDebug = false; | ||
20 | + static final private byte[] base64Alphabet = new byte[BASELENGTH]; | ||
21 | + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; | ||
22 | + static { | ||
23 | + for (int i = 0; i < BASELENGTH; ++i) { | ||
24 | + base64Alphabet[i] = -1; | ||
25 | + } | ||
26 | + for (int i = 'Z'; i >= 'A'; i--) { | ||
27 | + base64Alphabet[i] = (byte) (i - 'A'); | ||
28 | + } | ||
29 | + for (int i = 'z'; i >= 'a'; i--) { | ||
30 | + base64Alphabet[i] = (byte) (i - 'a' + 26); | ||
31 | + } | ||
32 | + for (int i = '9'; i >= '0'; i--) { | ||
33 | + base64Alphabet[i] = (byte) (i - '0' + 52); | ||
34 | + } | ||
35 | + base64Alphabet['+'] = 62; | ||
36 | + base64Alphabet['/'] = 63; | ||
37 | + for (int i = 0; i <= 25; i++) { | ||
38 | + lookUpBase64Alphabet[i] = (char) ('A' + i); | ||
39 | + } | ||
40 | + for (int i = 26, j = 0; i <= 51; i++, j++) { | ||
41 | + lookUpBase64Alphabet[i] = (char) ('a' + j); | ||
42 | + } | ||
43 | + for (int i = 52, j = 0; i <= 61; i++, j++) { | ||
44 | + lookUpBase64Alphabet[i] = (char) ('0' + j); | ||
45 | + } | ||
46 | + lookUpBase64Alphabet[62] = (char) '+'; | ||
47 | + lookUpBase64Alphabet[63] = (char) '/'; | ||
48 | + } | ||
49 | + | ||
50 | + | ||
51 | + private static boolean isWhiteSpace(char octect) { | ||
52 | + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); | ||
53 | + } | ||
54 | + | ||
55 | + | ||
56 | + private static boolean isPad(char octect) { | ||
57 | + return (octect == PAD); | ||
58 | + } | ||
59 | + | ||
60 | + | ||
61 | + private static boolean isData(char octect) { | ||
62 | + return (octect < BASELENGTH && base64Alphabet[octect] != -1); | ||
63 | + } | ||
64 | + | ||
65 | + /** | ||
66 | + * Encodes hex octects into Base64 | ||
67 | + * | ||
68 | + * @param binaryData | ||
69 | + * Array containing binaryData | ||
70 | + * @return Encoded Base64 array | ||
71 | + */ | ||
72 | + public static String encode(byte[] binaryData) { | ||
73 | + | ||
74 | + if (binaryData == null) { | ||
75 | + return null; | ||
76 | + } | ||
77 | + int lengthDataBits = binaryData.length * EIGHTBIT; | ||
78 | + if (lengthDataBits == 0) { | ||
79 | + return ""; | ||
80 | + } | ||
81 | + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; | ||
82 | + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; | ||
83 | + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; | ||
84 | + char encodedData[] = null; | ||
85 | + encodedData = new char[numberQuartet * 4]; | ||
86 | + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; | ||
87 | + int encodedIndex = 0; | ||
88 | + int dataIndex = 0; | ||
89 | + if (fDebug) { | ||
90 | + System.out.println("number of triplets = " + numberTriplets); | ||
91 | + } | ||
92 | + for (int i = 0; i < numberTriplets; i++) { | ||
93 | + b1 = binaryData[dataIndex++]; | ||
94 | + b2 = binaryData[dataIndex++]; | ||
95 | + b3 = binaryData[dataIndex++]; | ||
96 | + if (fDebug) { | ||
97 | + System.out.println("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3); | ||
98 | + } | ||
99 | + l = (byte) (b2 & 0x0f); | ||
100 | + k = (byte) (b1 & 0x03); | ||
101 | + | ||
102 | + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); | ||
103 | + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); | ||
104 | + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); | ||
105 | + if (fDebug) { | ||
106 | + System.out.println("val2 = " + val2); | ||
107 | + System.out.println("k4 = " + (k << 4)); | ||
108 | + System.out.println("vak = " + (val2 | (k << 4))); | ||
109 | + } | ||
110 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; | ||
111 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; | ||
112 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; | ||
113 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; | ||
114 | + } | ||
115 | + // form integral number of 6-bit groups | ||
116 | + if (fewerThan24bits == EIGHTBIT) { | ||
117 | + b1 = binaryData[dataIndex]; | ||
118 | + k = (byte) (b1 & 0x03); | ||
119 | + if (fDebug) { | ||
120 | + System.out.println("b1=" + b1); | ||
121 | + System.out.println("b1<<2 = " + (b1 >> 2)); | ||
122 | + } | ||
123 | + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); | ||
124 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; | ||
125 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; | ||
126 | + encodedData[encodedIndex++] = PAD; | ||
127 | + encodedData[encodedIndex++] = PAD; | ||
128 | + } | ||
129 | + else if (fewerThan24bits == SIXTEENBIT) { | ||
130 | + b1 = binaryData[dataIndex]; | ||
131 | + b2 = binaryData[dataIndex + 1]; | ||
132 | + l = (byte) (b2 & 0x0f); | ||
133 | + k = (byte) (b1 & 0x03); | ||
134 | + | ||
135 | + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); | ||
136 | + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); | ||
137 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; | ||
138 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; | ||
139 | + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; | ||
140 | + encodedData[encodedIndex++] = PAD; | ||
141 | + } | ||
142 | + return new String(encodedData); | ||
143 | + } | ||
144 | + | ||
145 | + /** | ||
146 | + * Decodes Base64 data into octects | ||
147 | + * | ||
148 | + * @param encoded | ||
149 | + * string containing Base64 data | ||
150 | + * @return Array containind decoded data. | ||
151 | + */ | ||
152 | + public static byte[] decode(String encoded) { | ||
153 | + | ||
154 | + if (encoded == null) { | ||
155 | + return null; | ||
156 | + } | ||
157 | + char[] base64Data = encoded.toCharArray(); | ||
158 | + // remove white spaces | ||
159 | + int len = removeWhiteSpace(base64Data); | ||
160 | + if (len % FOURBYTE != 0) { | ||
161 | + return null;// should be divisible by four | ||
162 | + } | ||
163 | + int numberQuadruple = (len / FOURBYTE); | ||
164 | + | ||
165 | + if (numberQuadruple == 0) { | ||
166 | + return new byte[0]; | ||
167 | + } | ||
168 | + byte decodedData[] = null; | ||
169 | + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; | ||
170 | + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; | ||
171 | + int i = 0; | ||
172 | + int encodedIndex = 0; | ||
173 | + int dataIndex = 0; | ||
174 | + decodedData = new byte[(numberQuadruple) * 3]; | ||
175 | + for (; i < numberQuadruple - 1; i++) { | ||
176 | + | ||
177 | + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) { | ||
178 | + return null; | ||
179 | + }// if found "no data" just return null | ||
180 | + b1 = base64Alphabet[d1]; | ||
181 | + b2 = base64Alphabet[d2]; | ||
182 | + b3 = base64Alphabet[d3]; | ||
183 | + b4 = base64Alphabet[d4]; | ||
184 | + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); | ||
185 | + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); | ||
186 | + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); | ||
187 | + } | ||
188 | + | ||
189 | + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) { | ||
190 | + return null;// if found "no data" just return null | ||
191 | + } | ||
192 | + b1 = base64Alphabet[d1]; | ||
193 | + b2 = base64Alphabet[d2]; | ||
194 | + d3 = base64Data[dataIndex++]; | ||
195 | + d4 = base64Data[dataIndex++]; | ||
196 | + if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters | ||
197 | + if (isPad(d3) && isPad(d4)) { | ||
198 | + if ((b2 & 0xf) != 0)// last 4 bits should be zero | ||
199 | + { | ||
200 | + return null; | ||
201 | + } | ||
202 | + byte[] tmp = new byte[i * 3 + 1]; | ||
203 | + System.arraycopy(decodedData, 0, tmp, 0, i * 3); | ||
204 | + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); | ||
205 | + return tmp; | ||
206 | + } | ||
207 | + else if (!isPad(d3) && isPad(d4)) { | ||
208 | + b3 = base64Alphabet[d3]; | ||
209 | + if ((b3 & 0x3) != 0)// last 2 bits should be zero | ||
210 | + { | ||
211 | + return null; | ||
212 | + } | ||
213 | + byte[] tmp = new byte[i * 3 + 2]; | ||
214 | + System.arraycopy(decodedData, 0, tmp, 0, i * 3); | ||
215 | + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); | ||
216 | + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); | ||
217 | + return tmp; | ||
218 | + } | ||
219 | + else { | ||
220 | + return null; | ||
221 | + } | ||
222 | + } | ||
223 | + else { // No PAD e.g 3cQl | ||
224 | + b3 = base64Alphabet[d3]; | ||
225 | + b4 = base64Alphabet[d4]; | ||
226 | + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); | ||
227 | + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); | ||
228 | + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); | ||
229 | + } | ||
230 | + return decodedData; | ||
231 | + } | ||
232 | + | ||
233 | + | ||
234 | + /** | ||
235 | + * remove WhiteSpace from MIME containing encoded Base64 data. | ||
236 | + * | ||
237 | + * @param data | ||
238 | + * the byte array of base64 data (with WS) | ||
239 | + * @return the new length | ||
240 | + */ | ||
241 | + private static int removeWhiteSpace(char[] data) { | ||
242 | + if (data == null) { | ||
243 | + return 0; | ||
244 | + } | ||
245 | + | ||
246 | + // count characters that's not whitespace | ||
247 | + int newSize = 0; | ||
248 | + int len = data.length; | ||
249 | + for (int i = 0; i < len; i++) { | ||
250 | + if (!isWhiteSpace(data[i])) { | ||
251 | + data[newSize++] = data[i]; | ||
252 | + } | ||
253 | + } | ||
254 | + return newSize; | ||
255 | + } | ||
256 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/tools/CacheKeyGenerator.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/tools/CacheKeyGenerator.java | ||
1 | +package com.b2c.dtms.common.tools; | ||
2 | + | ||
3 | +import lombok.Getter; | ||
4 | +import lombok.NoArgsConstructor; | ||
5 | +import lombok.Setter; | ||
6 | +import org.springframework.cache.interceptor.KeyGenerator; | ||
7 | + | ||
8 | +import java.lang.reflect.Method; | ||
9 | + | ||
10 | +/** | ||
11 | + * Created by yuehongbo on 2016/8/25. | ||
12 | + */ | ||
13 | +@NoArgsConstructor | ||
14 | +public class CacheKeyGenerator implements KeyGenerator { | ||
15 | + | ||
16 | + @Getter | ||
17 | + @Setter | ||
18 | + private String prefix=""; | ||
19 | + | ||
20 | + @Override | ||
21 | + public Object generate(Object target, Method method, Object... params) { | ||
22 | + StringBuffer key = new StringBuffer(); | ||
23 | + if (prefix != null) { | ||
24 | + key.append(prefix); | ||
25 | + key.append(":"); | ||
26 | + } | ||
27 | + key.append(target.getClass().getName()); | ||
28 | + key.append("."); | ||
29 | + key.append(method.getName()); | ||
30 | + key.append(":"); | ||
31 | + return key; | ||
32 | + } | ||
33 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/tools/CloneUtils.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/tools/CloneUtils.java | ||
1 | +package com.b2c.dtms.common.tools; | ||
2 | + | ||
3 | +import java.io.*; | ||
4 | + | ||
5 | + | ||
6 | +public class CloneUtils { | ||
7 | + | ||
8 | + public static Object clone(Object clonedObject){ | ||
9 | + ByteArrayOutputStream byteArrayOut=null; | ||
10 | + ObjectOutputStream objectOut=null; | ||
11 | + try { | ||
12 | + byteArrayOut=new ByteArrayOutputStream(); | ||
13 | + objectOut = new ObjectOutputStream(byteArrayOut); | ||
14 | + objectOut.writeObject(clonedObject); | ||
15 | + | ||
16 | + ByteArrayInputStream byteArrayIn=new ByteArrayInputStream(byteArrayOut.toByteArray()); | ||
17 | + ObjectInputStream objectIn=new ObjectInputStream(byteArrayIn); | ||
18 | + | ||
19 | + return objectIn.readObject(); | ||
20 | + | ||
21 | + } catch (IOException e) { | ||
22 | + new RuntimeException(e.getMessage()); | ||
23 | + } catch (ClassNotFoundException e) { | ||
24 | + new RuntimeException(e.getMessage()); | ||
25 | + } | ||
26 | + return null; | ||
27 | + } | ||
28 | +} |
dtms-domain/src/main/java/com/b2c/dtms/common/tools/CollectionUtils.java
0 → 100644
1 | +++ a/dtms-domain/src/main/java/com/b2c/dtms/common/tools/CollectionUtils.java | ||
1 | +package com.b2c.dtms.common.tools; | ||
2 | + | ||
3 | +import java.util.Collection; | ||
4 | +import java.util.List; | ||
5 | + | ||
6 | + | ||
7 | +public class CollectionUtils { | ||
8 | + | ||
9 | + public static boolean isEmpty(Collection<?> collection) { | ||
10 | + return (collection == null || collection.isEmpty()); | ||
11 | + } | ||
12 | + | ||
13 | + public static String[] strList2Array(List<String> list ){ | ||
14 | + return list.toArray(new String[list.size()]); | ||
15 | + } | ||
16 | + | ||
17 | + public static Long[] longList2Array(List<Long> list ){ | ||
18 | + return list.toArray(new Long[list.size()]); | ||
19 | + } | ||
20 | +} |