Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
O
oms-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
oms-ci-test
Commits
e75a6d22
提交
e75a6d22
authored
8月 26, 2023
作者:
张小凤
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NotRepeatSubmit(update)
上级
343e0199
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
131 行增加
和
3 行删除
+131
-3
pom.xml
pom.xml
+5
-0
DemandReleaseOrderController.java
...c/oms/controller/demand/DemandReleaseOrderController.java
+2
-0
NotRepeatSubmit.java
...com/mmc/oms/controller/demand/commit/NotRepeatSubmit.java
+17
-0
NotRepeatSubmitConfig.java
...c/oms/controller/demand/commit/NotRepeatSubmitConfig.java
+80
-0
DemandReleaseOrderDao.java
...in/java/com/mmc/oms/dao/demand/DemandReleaseOrderDao.java
+2
-0
GetOrderNumberDO.java
...main/java/com/mmc/oms/entity/demand/GetOrderNumberDO.java
+4
-0
GetOrderNumberDTO.java
...ain/java/com/mmc/oms/entity/demand/GetOrderNumberDTO.java
+3
-0
DemandReleaseOrderServiceImpl.java
...ms/service/demand/Impl/DemandReleaseOrderServiceImpl.java
+9
-3
DemandReleaseOrderDao.xml
src/main/resources/mapper/demand/DemandReleaseOrderDao.xml
+9
-0
没有找到文件。
pom.xml
浏览文件 @
e75a6d22
...
...
@@ -20,6 +20,11 @@
</properties>
<dependencies>
<dependency>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson-spring-boot-starter
</artifactId>
<version>
3.15.6
</version>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
<version>
4.5.2
</version>
...
...
src/main/java/com/mmc/oms/controller/demand/DemandReleaseOrderController.java
浏览文件 @
e75a6d22
...
...
@@ -5,6 +5,7 @@ import com.mmc.oms.common.publicinterface.Insert;
import
com.mmc.oms.common.publicinterface.Update
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.controller.BaseController
;
import
com.mmc.oms.controller.demand.commit.NotRepeatSubmit
;
import
com.mmc.oms.model.vo.demand.CommonPaymentVO
;
import
com.mmc.oms.model.vo.demand.DemandReleaseOrderVO
;
import
com.mmc.oms.service.demand.DemandReleaseOrderService
;
...
...
@@ -55,6 +56,7 @@ public class DemandReleaseOrderController extends BaseController {
@ApiOperation
(
value
=
"订单支付"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"/orderPayment"
)
@NotRepeatSubmit
(
value
=
3000L
)
public
ResultBody
orderPayment
(
@RequestBody
@Validated
CommonPaymentVO
commonPaymentVO
,
HttpServletRequest
request
)
{
return
releaseOrderService
.
orderPayment
(
commonPaymentVO
,
request
,
this
.
getCurrentAccount
(
request
).
getUserAccountId
());
}
...
...
src/main/java/com/mmc/oms/controller/demand/commit/NotRepeatSubmit.java
0 → 100644
浏览文件 @
e75a6d22
package
com
.
mmc
.
oms
.
controller
.
demand
.
commit
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* @Author small
* @Date 2023/8/26 16:34
* @Version 1.0
*/
@Target
({
ElementType
.
TYPE
,
ElementType
.
METHOD
})
@Retention
(
RetentionPolicy
.
RUNTIME
)
public
@interface
NotRepeatSubmit
{
long
value
();
}
src/main/java/com/mmc/oms/controller/demand/commit/NotRepeatSubmitConfig.java
0 → 100644
浏览文件 @
e75a6d22
package
com
.
mmc
.
oms
.
controller
.
demand
.
commit
;
import
com.mmc.oms.controller.BaseController
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.concurrent.TimeUnit
;
/**
* @Author small
* @Date 2023/8/26 16:13
* @Version 1.0
*/
@Slf4j
@Component
@Aspect
public
class
NotRepeatSubmitConfig
extends
BaseController
{
@Autowired
private
RedissonClient
redissonClient
;
@Pointcut
(
"@within(notRepeatSubmit)||@annotation(notRepeatSubmit)"
)
public
void
pointcut
(
NotRepeatSubmit
notRepeatSubmit
)
{
}
@Around
(
value
=
"pointcut(notRepeatSubmit)"
)
public
Object
around
(
ProceedingJoinPoint
proceedingJoinPoint
,
NotRepeatSubmit
notRepeatSubmit
)
throws
Throwable
{
log
.
info
(
"提交之前---"
);
Object
result
=
null
;
long
leaseTime
=
notRepeatSubmit
.
value
();
log
.
info
(
"leaseTime:"
+
leaseTime
);
ServletRequestAttributes
attributes
=
(
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
();
HttpServletRequest
request
=
attributes
.
getRequest
();
Integer
userAccountId
=
this
.
getCurrentAccount
(
request
).
getUserAccountId
();
String
accountUriLockKey
=
userAccountId
+
"-"
+
request
.
getServletPath
();
// 设置锁定资源名称,accountUriLock改为userid+uri作为标识,作为测试写死
// String accountUriLockKey = "accountUriLock";
RLock
accountUriLock
=
redissonClient
.
getLock
(
accountUriLockKey
);
boolean
tryLock
;
//尝试获取分布式锁
//-1为永久 leaseTime 最多等待几秒 上锁以后leaseTime秒自动解锁
tryLock
=
accountUriLock
.
tryLock
(-
1
,
leaseTime
,
TimeUnit
.
MILLISECONDS
);
log
.
info
(
"tryLock:"
+
tryLock
);
if
(
tryLock
)
{
try
{
// 查询订单库存判断是否大于0
// 大于0表示还有库存可以更新订单库存将库存数字减一更新到数据库中
// 不大于0表示没有库存了本次请求就终止
log
.
info
(
"正常提交:"
);
result
=
proceedingJoinPoint
.
proceed
();
}
catch
(
Exception
e
)
{
log
.
info
(
"主程序异常:"
+
e
);
throw
new
Exception
(
e
);
}
}
else
{
log
.
info
(
"重复提交:"
+
accountUriLockKey
);
}
log
.
info
(
"提交之后---"
);
return
result
;
}
}
src/main/java/com/mmc/oms/dao/demand/DemandReleaseOrderDao.java
浏览文件 @
e75a6d22
...
...
@@ -23,4 +23,6 @@ public interface DemandReleaseOrderDao {
DemandReleaseOrderDO
selectPhone
(
String
orderNumber
);
void
insertService
(
GetOrderNumberDO
getOrderNumberDO
);
int
selectOrderNumberDO
(
Integer
requirementsInfoId
);
}
src/main/java/com/mmc/oms/entity/demand/GetOrderNumberDO.java
浏览文件 @
e75a6d22
...
...
@@ -32,10 +32,14 @@ public class GetOrderNumberDO {
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"服务id"
)
private
Integer
requirementsInfoId
;
public
GetOrderNumberDO
(
GetOrderNumberDTO
getOrderNumberDTO
){
this
.
paymentOrderNumber
=
getOrderNumberDTO
.
getPaymentOrderNumber
();
this
.
weChatPay
=
getOrderNumberDTO
.
getWeChatPay
();
this
.
userAccountId
=
getOrderNumberDTO
.
getUserAccountId
();
this
.
requirementsInfoId
=
getOrderNumberDTO
.
getRequirementsInfoId
();
}
public
OrderRequestParamsVO
orderRequestParamsVO
()
{
...
...
src/main/java/com/mmc/oms/entity/demand/GetOrderNumberDTO.java
浏览文件 @
e75a6d22
...
...
@@ -30,5 +30,8 @@ public class GetOrderNumberDTO implements Serializable {
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"服务id"
)
private
Integer
requirementsInfoId
;
}
src/main/java/com/mmc/oms/service/demand/Impl/DemandReleaseOrderServiceImpl.java
浏览文件 @
e75a6d22
...
...
@@ -124,13 +124,19 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
* @param userAccountId
* @return
*/
private
ResultBody
publishServicePay
(
CommonPaymentVO
commonPaymentVO
,
String
token
,
Integer
userAccountId
)
{
private
ResultBody
publishServicePay
(
CommonPaymentVO
commonPaymentVO
,
String
token
,
Integer
userAccountId
)
{
if
(
"4"
.
equals
(
commonPaymentVO
.
getOrderPort
().
toString
()))
{
if
(
"4"
.
equals
(
commonPaymentVO
.
getOrderPort
().
toString
())){
String
orderNumber
=
commonPaymentVO
.
getOrderNumber
();
String
json
=
stringRedisTemplate
.
opsForValue
().
get
(
orderNumber
);
GetOrderNumberDTO
getOrderNumberDTO
=
JSONObject
.
parseObject
(
json
,
GetOrderNumberDTO
.
class
);
GetOrderNumberDO
getOrderNumberDO
=
new
GetOrderNumberDO
(
getOrderNumberDTO
);
if
(
getOrderNumberDTO
.
getRequirementsInfoId
()!=
null
){
int
i
=
releaseOrderDao
.
selectOrderNumberDO
(
getOrderNumberDO
.
getRequirementsInfoId
());
if
(
i
!=
0
){
return
ResultBody
.
error
(
"当前需求已有人支付"
);
}
}
releaseOrderDao
.
insertService
(
getOrderNumberDO
);
BigDecimal
paramMoney
=
getOrderNumberDO
.
getWeChatPay
();
BigDecimal
multiply
=
paramMoney
.
multiply
(
new
BigDecimal
(
100
));
...
...
@@ -138,7 +144,7 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
OrderRequestParamsVO
orderRequestParamsVO
=
getOrderNumberDO
.
orderRequestParamsVO
();
orderRequestParamsVO
.
setAmount
(
i
);
ResultBody
resultBody
=
releaseOrder
(
orderRequestParamsVO
,
token
);
stringRedisTemplate
.
opsForValue
().
set
(
getOrderNumberDO
.
getPaymentOrderNumber
()
+
getOrderNumberDO
.
getUserAccountId
(),
JsonUtil
.
parseObjToJson
(
getOrderNumberDO
));
stringRedisTemplate
.
opsForValue
().
set
(
getOrderNumberDO
.
getPaymentOrderNumber
()
+
getOrderNumberDO
.
getUserAccountId
(),
JsonUtil
.
parseObjToJson
(
getOrderNumberDO
));
return
resultBody
;
}
return
ResultBody
.
success
();
...
...
src/main/resources/mapper/demand/DemandReleaseOrderDao.xml
浏览文件 @
e75a6d22
...
...
@@ -43,4 +43,13 @@
INSERT INTO service_demand_order(payment_order_number, we_chat_pay, user_account_id, create_time,update_time)
VALUES (#{paymentOrderNumber}, #{weChatPay},#{userAccountId},NOW(),NOW());
</insert>
<select
id=
"selectOrderNumberDO"
resultType=
"java.lang.Integer"
>
SELECT
count(*)
FROM
service_demand_order
WHERE
requirements_info_id =#{requirementsInfoId}
</select>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论