Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
O
oms
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
iuav
oms
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 @@
...
@@ -20,6 +20,11 @@
</properties>
</properties>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson-spring-boot-starter
</artifactId>
<version>
3.15.6
</version>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpclient
</artifactId>
<artifactId>
httpclient
</artifactId>
<version>
4.5.2
</version>
<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;
...
@@ -5,6 +5,7 @@ import com.mmc.oms.common.publicinterface.Insert;
import
com.mmc.oms.common.publicinterface.Update
;
import
com.mmc.oms.common.publicinterface.Update
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.controller.BaseController
;
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.CommonPaymentVO
;
import
com.mmc.oms.model.vo.demand.DemandReleaseOrderVO
;
import
com.mmc.oms.model.vo.demand.DemandReleaseOrderVO
;
import
com.mmc.oms.service.demand.DemandReleaseOrderService
;
import
com.mmc.oms.service.demand.DemandReleaseOrderService
;
...
@@ -55,6 +56,7 @@ public class DemandReleaseOrderController extends BaseController {
...
@@ -55,6 +56,7 @@ public class DemandReleaseOrderController extends BaseController {
@ApiOperation
(
value
=
"订单支付"
)
@ApiOperation
(
value
=
"订单支付"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)})
@PostMapping
(
"/orderPayment"
)
@PostMapping
(
"/orderPayment"
)
@NotRepeatSubmit
(
value
=
3000L
)
public
ResultBody
orderPayment
(
@RequestBody
@Validated
CommonPaymentVO
commonPaymentVO
,
HttpServletRequest
request
)
{
public
ResultBody
orderPayment
(
@RequestBody
@Validated
CommonPaymentVO
commonPaymentVO
,
HttpServletRequest
request
)
{
return
releaseOrderService
.
orderPayment
(
commonPaymentVO
,
request
,
this
.
getCurrentAccount
(
request
).
getUserAccountId
());
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 {
...
@@ -23,4 +23,6 @@ public interface DemandReleaseOrderDao {
DemandReleaseOrderDO
selectPhone
(
String
orderNumber
);
DemandReleaseOrderDO
selectPhone
(
String
orderNumber
);
void
insertService
(
GetOrderNumberDO
getOrderNumberDO
);
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 {
...
@@ -32,10 +32,14 @@ public class GetOrderNumberDO {
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
private
Integer
userAccountId
;
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"服务id"
)
private
Integer
requirementsInfoId
;
public
GetOrderNumberDO
(
GetOrderNumberDTO
getOrderNumberDTO
){
public
GetOrderNumberDO
(
GetOrderNumberDTO
getOrderNumberDTO
){
this
.
paymentOrderNumber
=
getOrderNumberDTO
.
getPaymentOrderNumber
();
this
.
paymentOrderNumber
=
getOrderNumberDTO
.
getPaymentOrderNumber
();
this
.
weChatPay
=
getOrderNumberDTO
.
getWeChatPay
();
this
.
weChatPay
=
getOrderNumberDTO
.
getWeChatPay
();
this
.
userAccountId
=
getOrderNumberDTO
.
getUserAccountId
();
this
.
userAccountId
=
getOrderNumberDTO
.
getUserAccountId
();
this
.
requirementsInfoId
=
getOrderNumberDTO
.
getRequirementsInfoId
();
}
}
public
OrderRequestParamsVO
orderRequestParamsVO
()
{
public
OrderRequestParamsVO
orderRequestParamsVO
()
{
...
...
src/main/java/com/mmc/oms/entity/demand/GetOrderNumberDTO.java
浏览文件 @
e75a6d22
...
@@ -30,5 +30,8 @@ public class GetOrderNumberDTO implements Serializable {
...
@@ -30,5 +30,8 @@ public class GetOrderNumberDTO implements Serializable {
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
private
Integer
userAccountId
;
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
...
@@ -124,13 +124,19 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
* @param userAccountId
* @param userAccountId
* @return
* @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
orderNumber
=
commonPaymentVO
.
getOrderNumber
();
String
json
=
stringRedisTemplate
.
opsForValue
().
get
(
orderNumber
);
String
json
=
stringRedisTemplate
.
opsForValue
().
get
(
orderNumber
);
GetOrderNumberDTO
getOrderNumberDTO
=
JSONObject
.
parseObject
(
json
,
GetOrderNumberDTO
.
class
);
GetOrderNumberDTO
getOrderNumberDTO
=
JSONObject
.
parseObject
(
json
,
GetOrderNumberDTO
.
class
);
GetOrderNumberDO
getOrderNumberDO
=
new
GetOrderNumberDO
(
getOrderNumberDTO
);
GetOrderNumberDO
getOrderNumberDO
=
new
GetOrderNumberDO
(
getOrderNumberDTO
);
if
(
getOrderNumberDTO
.
getRequirementsInfoId
()!=
null
){
int
i
=
releaseOrderDao
.
selectOrderNumberDO
(
getOrderNumberDO
.
getRequirementsInfoId
());
if
(
i
!=
0
){
return
ResultBody
.
error
(
"当前需求已有人支付"
);
}
}
releaseOrderDao
.
insertService
(
getOrderNumberDO
);
releaseOrderDao
.
insertService
(
getOrderNumberDO
);
BigDecimal
paramMoney
=
getOrderNumberDO
.
getWeChatPay
();
BigDecimal
paramMoney
=
getOrderNumberDO
.
getWeChatPay
();
BigDecimal
multiply
=
paramMoney
.
multiply
(
new
BigDecimal
(
100
));
BigDecimal
multiply
=
paramMoney
.
multiply
(
new
BigDecimal
(
100
));
...
@@ -138,7 +144,7 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
...
@@ -138,7 +144,7 @@ public class DemandReleaseOrderServiceImpl implements DemandReleaseOrderService
OrderRequestParamsVO
orderRequestParamsVO
=
getOrderNumberDO
.
orderRequestParamsVO
();
OrderRequestParamsVO
orderRequestParamsVO
=
getOrderNumberDO
.
orderRequestParamsVO
();
orderRequestParamsVO
.
setAmount
(
i
);
orderRequestParamsVO
.
setAmount
(
i
);
ResultBody
resultBody
=
releaseOrder
(
orderRequestParamsVO
,
token
);
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
;
}
}
return
ResultBody
.
success
();
return
ResultBody
.
success
();
...
...
src/main/resources/mapper/demand/DemandReleaseOrderDao.xml
浏览文件 @
e75a6d22
...
@@ -43,4 +43,13 @@
...
@@ -43,4 +43,13 @@
INSERT INTO service_demand_order(payment_order_number, we_chat_pay, user_account_id, create_time,update_time)
INSERT INTO service_demand_order(payment_order_number, we_chat_pay, user_account_id, create_time,update_time)
VALUES (#{paymentOrderNumber}, #{weChatPay},#{userAccountId},NOW(),NOW());
VALUES (#{paymentOrderNumber}, #{weChatPay},#{userAccountId},NOW(),NOW());
</insert>
</insert>
<select
id=
"selectOrderNumberDO"
resultType=
"java.lang.Integer"
>
SELECT
count(*)
FROM
service_demand_order
WHERE
requirements_info_id =#{requirementsInfoId}
</select>
</mapper>
</mapper>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论