Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
晶之木
miaosha
提交
3b53b9d0
M
miaosha
项目概览
晶之木
/
miaosha
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
miaosha
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3b53b9d0
编写于
12月 13, 2018
作者:
Q
qiurunze
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rpc补偿思路整理
上级
f2cdb2f8
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
421 addition
and
1 deletion
+421
-1
src/main/java/com/geekq/miaosha/common/SnowflakeIdWorker.java
...main/java/com/geekq/miaosha/common/SnowflakeIdWorker.java
+12
-1
src/main/java/com/geekq/miaosha/service/rpchander/RpcCompensateService.java
...geekq/miaosha/service/rpchander/RpcCompensateService.java
+106
-0
src/main/java/com/geekq/miaosha/service/rpchander/RpcHandler.java
.../java/com/geekq/miaosha/service/rpchander/RpcHandler.java
+10
-0
src/main/java/com/geekq/miaosha/service/rpchander/enums/PlanStepStatus.java
...geekq/miaosha/service/rpchander/enums/PlanStepStatus.java
+11
-0
src/main/java/com/geekq/miaosha/service/rpchander/enums/PlanStepType.java
...m/geekq/miaosha/service/rpchander/enums/PlanStepType.java
+43
-0
src/main/java/com/geekq/miaosha/service/rpchander/vo/HandlerParam.java
.../com/geekq/miaosha/service/rpchander/vo/HandlerParam.java
+9
-0
src/main/java/com/geekq/miaosha/service/rpchander/vo/PlanOrder.java
...ava/com/geekq/miaosha/service/rpchander/vo/PlanOrder.java
+125
-0
src/main/java/com/geekq/miaosha/service/rpchander/vo/PlanStep.java
...java/com/geekq/miaosha/service/rpchander/vo/PlanStep.java
+105
-0
未找到文件。
src/main/java/com/geekq/miaosha/SnowflakeIdWorker.java
→
src/main/java/com/geekq/miaosha/
common/
SnowflakeIdWorker.java
浏览文件 @
3b53b9d0
package
com.geekq.miaosha
;
package
com.geekq.miaosha
.common
;
/**
* Twitter_Snowflake<br>
* SnowFlake的结构如下(每部分用-分开):<br>
...
...
@@ -73,6 +73,17 @@ public class SnowflakeIdWorker {
this
.
datacenterId
=
datacenterId
;
}
/**
* 生成订单唯一ID
* @param workerId
* @param datacenterId
* @return
*/
public
static
long
getOrderId
(
long
workerId
,
long
datacenterId
){
SnowflakeIdWorker
idWorker
=
new
SnowflakeIdWorker
(
0
,
0
);
return
idWorker
.
nextId
();
}
// ==============================Methods==========================================
/**
* 获得下一个ID (该方法是线程安全的)
...
...
src/main/java/com/geekq/miaosha/service/rpchander/RpcCompensateService.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander
;
import
com.geekq.miaosha.common.SnowflakeIdWorker
;
import
com.geekq.miaosha.common.resultbean.ResultGeekQ
;
import
com.geekq.miaosha.service.rpchander.enums.PlanStepStatus
;
import
com.geekq.miaosha.service.rpchander.enums.PlanStepType
;
import
com.geekq.miaosha.service.rpchander.vo.HandlerParam
;
import
com.geekq.miaosha.service.rpchander.vo.PlanOrder
;
import
com.geekq.miaosha.service.rpchander.vo.PlanStep
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
@Service
public
class
RpcCompensateService
{
public
ResultGeekQ
<
String
>
recharge
(){
ResultGeekQ
<
String
>
result
=
ResultGeekQ
.
build
();
/**
* 各种校验check
*/
/**
* 需要可加redis分布式锁
*/
/**
* 拦截
* 校验状态 -- init 或 ROLLING_BACK则 返回
*
* 成功则返回已处理状态
*/
/**
* 生成订单和处理步骤
*/
/**
* 获取订单
*/
long
orderId
=
SnowflakeIdWorker
.
getOrderId
(
1
,
1
);
/**
* 创建订单步骤 可定义一个VO
* 一个planorder 对应多个planstep
* 创建 PlanOrder 创建 planStep
* createOrderStep(vo);
*/
// PlanOrder planOrder = new PlanOrder();
// planOrder.setCreateTime(new Date());
// planOrder.setVersion(0);
// planOrder.setUserId(inputVo.getUserId());
// planOrder.setOrderNo(inputVo.getOrderNo());
// planOrder.setType(PlanOrderType.X_RECHARGE.name());
// planOrder.setParams(params);
// planOrder.setStatus(PlanOrderStatus.INIT.name());
// planOrderDao.insertSelective(planOrder);
//
// List<PlanStep> steps = new ArrayList<>();
// //第一步请求民生
// steps.add(planStepLogic.buildStep(planOrder.getId(), PlanStepType.X_RECHARGE_CMBC, PlanStepStatus.INIT));
// if (inputVo.getCouponId() != null) {
// //第二步使用优惠券
// steps.add(planStepLogic.buildStep(planOrder.getId(), PlanStepType.X_RECHARGE_USE_COUPON, PlanStepStatus.INIT));
// }
// //第三步减扣主账户
// steps.add(planStepLogic.buildStep(planOrder.getId(), PlanStepType.X_RECHARGE_POINT, PlanStepStatus.INIT));
// //第四部减扣子账户
// steps.add(planStepLogic.buildStep(planOrder.getId(), PlanStepType.X_RECHARGE_SUB_POINT, PlanStepStatus.INIT));
// //第五步发送通知
// steps.add(planStepLogic.buildStep(planOrder.getId(), PlanStepType.X_RECHARGE_NOTIFY, PlanStepStatus.INIT));
//
// planStepDao.batchInsert(steps);
/**
*
* 调用Rpc接口 第几步错误则回滚前几步
* 并更新step状态
*
* 然后定时任务去处理 状态为INIT与ROLLBACK的 状态订单
*
*
*/
// HandlerParam handlerParam = new HandlerParam();
// handlerParam.setPlanOrder(planOrder);
// AutoInvestPlanRechargeOrderInputVo inputVo = JsonUtil.jsonToBean(planOrder.getParams(), AutoInvestPlanRechargeOrderInputVo.class);
// handlerParam.setInputVo(inputVo);
// for (int i = 0; i < planStepList.size(); i++) {
// PlanStep planStep = planStepList.get(i);
// PlanStepType stepType = PlanStepType.valueOf(planStep.getType());
// xxx handler = (xxx) xxxx.getApplicationContext().getBean(stepType.getHandler());
// boolean handlerResult = handler.handle(handlerParam);
// if (!handlerResult) {
// break;
// }
// }
return
result
;
}
}
\ No newline at end of file
src/main/java/com/geekq/miaosha/service/rpchander/RpcHandler.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander
;
public
interface
RpcHandler
{
int
RETRY_COUNT
=
5
;
boolean
handele
();
boolean
rollBack
();
}
src/main/java/com/geekq/miaosha/service/rpchander/enums/PlanStepStatus.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander.enums
;
public
enum
PlanStepStatus
{
INIT
,
//未处理
PROCESSING
,
//处理中
SUCCESS
,
//成功
FAIL
,
//失败
ROLLED_BACK
,
//已回滚
}
src/main/java/com/geekq/miaosha/service/rpchander/enums/PlanStepType.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander.enums
;
public
enum
PlanStepType
{
U_CMBC
(
10
,
"protocolHandler"
),
U_UPDATE_REDIS_AMOUNT
(
20
,
"redisAmountHandler"
),
U_USE_COUPON
(
30
,
"couponHandler"
),
U_USE_SCORE
(
40
,
"scoreHandler"
),
U_USE_UCODE
(
50
,
"uCodeHandler"
),
U_POINT
(
60
,
"pointHandler"
),
U_SUB_POINT
(
70
,
"subPointHandler"
),
U_NOTIFY
(
80
,
"notifyHandler"
),
X_RECHARGE_CMBC
(
10
,
"rechargeCmbcHandler"
),
X_RECHARGE_USE_COUPON
(
20
,
"rechargeCouponHandler"
),
X_RECHARGE_POINT
(
30
,
"rechargePointHandler"
),
X_RECHARGE_SUB_POINT
(
40
,
"rechargeSubPointHandler"
),
X_RECHARGE_NOTIFY
(
50
,
"rechargeNotifyHandler"
);
private
int
priority
;
private
String
handler
;
public
String
getHandler
()
{
return
handler
;
}
public
void
setHandler
(
String
handler
)
{
this
.
handler
=
handler
;
}
public
int
getPriority
()
{
return
priority
;
}
public
void
setPriority
(
int
priority
)
{
this
.
priority
=
priority
;
}
PlanStepType
(
int
priority
,
String
handler
)
{
this
.
priority
=
priority
;
this
.
handler
=
handler
;
}
}
src/main/java/com/geekq/miaosha/service/rpchander/vo/HandlerParam.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander.vo
;
public
class
HandlerParam
{
private
int
realCount
;
private
PlanOrder
planOrder
;
private
PlanStep
planStep
;
}
src/main/java/com/geekq/miaosha/service/rpchander/vo/PlanOrder.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander.vo
;
import
java.util.Date
;
public
class
PlanOrder
{
private
Long
id
;
private
Date
createTime
;
private
Date
updateTime
;
private
Integer
version
;
private
Integer
userId
;
private
String
orderNo
;
private
Integer
orderId
;
private
Integer
accountId
;
private
String
type
;
private
String
cmbcStatus
;
private
String
params
;
private
String
status
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
public
Integer
getVersion
()
{
return
version
;
}
public
void
setVersion
(
Integer
version
)
{
this
.
version
=
version
;
}
public
Integer
getUserId
()
{
return
userId
;
}
public
void
setUserId
(
Integer
userId
)
{
this
.
userId
=
userId
;
}
public
String
getOrderNo
()
{
return
orderNo
;
}
public
void
setOrderNo
(
String
orderNo
)
{
this
.
orderNo
=
orderNo
;
}
public
Integer
getOrderId
()
{
return
orderId
;
}
public
void
setOrderId
(
Integer
orderId
)
{
this
.
orderId
=
orderId
;
}
public
Integer
getAccountId
()
{
return
accountId
;
}
public
void
setAccountId
(
Integer
accountId
)
{
this
.
accountId
=
accountId
;
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
;
}
public
String
getCmbcStatus
()
{
return
cmbcStatus
;
}
public
void
setCmbcStatus
(
String
cmbcStatus
)
{
this
.
cmbcStatus
=
cmbcStatus
;
}
public
String
getParams
()
{
return
params
;
}
public
void
setParams
(
String
params
)
{
this
.
params
=
params
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
}
\ No newline at end of file
src/main/java/com/geekq/miaosha/service/rpchander/vo/PlanStep.java
0 → 100644
浏览文件 @
3b53b9d0
package
com.geekq.miaosha.service.rpchander.vo
;
import
java.util.Date
;
public
class
PlanStep
{
private
Long
id
;
private
Date
createTime
;
private
Date
updateTime
;
private
Integer
version
;
private
Long
orderId
;
private
String
status
;
private
String
type
;
private
Integer
priority
;
private
Integer
retryCount
;
private
String
remark
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
Date
getCreateTime
()
{
return
createTime
;
}
public
void
setCreateTime
(
Date
createTime
)
{
this
.
createTime
=
createTime
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
public
Integer
getVersion
()
{
return
version
;
}
public
void
setVersion
(
Integer
version
)
{
this
.
version
=
version
;
}
public
Long
getOrderId
()
{
return
orderId
;
}
public
void
setOrderId
(
Long
orderId
)
{
this
.
orderId
=
orderId
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
==
null
?
null
:
status
.
trim
();
}
public
String
getType
()
{
return
type
;
}
public
void
setType
(
String
type
)
{
this
.
type
=
type
==
null
?
null
:
type
.
trim
();
}
public
Integer
getPriority
()
{
return
priority
;
}
public
void
setPriority
(
Integer
priority
)
{
this
.
priority
=
priority
;
}
public
Integer
getRetryCount
()
{
return
retryCount
;
}
public
void
setRetryCount
(
Integer
retryCount
)
{
this
.
retryCount
=
retryCount
;
}
public
String
getRemark
()
{
return
remark
;
}
public
void
setRemark
(
String
remark
)
{
this
.
remark
=
remark
==
null
?
null
:
remark
.
trim
();
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录