Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
O
oms-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
oms-ci-test
Commits
86fa6dd6
提交
86fa6dd6
authored
9月 06, 2023
作者:
xiaowang
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop'
上级
124ffd1a
2f085b73
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
29 个修改的文件
包含
594 行增加
和
148 行删除
+594
-148
deployment.yaml
kustomization/base/deployment.yaml
+5
-0
kustomization.yaml
kustomization/overlays/dev/kustomization.yaml
+1
-1
pom.xml
pom.xml
+26
-2
TDateUtil.java
src/main/java/com/mmc/oms/common/util/TDateUtil.java
+1
-0
UserAddressController.java
...in/java/com/mmc/oms/controller/UserAddressController.java
+12
-12
DemandReleaseOrderController.java
...c/oms/controller/demand/DemandReleaseOrderController.java
+21
-4
NotRepeatSubmit.java
...com/mmc/oms/controller/demand/commit/NotRepeatSubmit.java
+17
-0
NotRepeatSubmitConfig.java
...c/oms/controller/demand/commit/NotRepeatSubmitConfig.java
+160
-0
DemandReleaseOrderDao.java
...in/java/com/mmc/oms/dao/demand/DemandReleaseOrderDao.java
+10
-0
PublishServiceOrderDao.java
...n/java/com/mmc/oms/dao/demand/PublishServiceOrderDao.java
+13
-0
TopUpOrderDao.java
src/main/java/com/mmc/oms/dao/topup/TopUpOrderDao.java
+18
-0
GetOrderNumberDO.java
...main/java/com/mmc/oms/entity/demand/GetOrderNumberDO.java
+51
-0
GetOrderNumberDTO.java
...ain/java/com/mmc/oms/entity/demand/GetOrderNumberDTO.java
+37
-0
TopUpOrderDO.java
src/main/java/com/mmc/oms/entity/topup/TopUpOrderDO.java
+35
-0
UserAppApi.java
src/main/java/com/mmc/oms/feign/UserAppApi.java
+9
-77
FeignConfiguration.java
...ain/java/com/mmc/oms/feign/config/FeignConfiguration.java
+7
-1
UserAppApiHystrix.java
...ain/java/com/mmc/oms/feign/hystrix/UserAppApiHystrix.java
+5
-49
CommonPaymentVO.java
...ain/java/com/mmc/oms/model/vo/demand/CommonPaymentVO.java
+5
-2
OrderRequestParamsVO.java
...ava/com/mmc/oms/model/vo/demand/OrderRequestParamsVO.java
+2
-0
TopUpOrderVO.java
src/main/java/com/mmc/oms/model/vo/wallet/TopUpOrderVO.java
+29
-0
RabbitmqConstant.java
src/main/java/com/mmc/oms/mq/constant/RabbitmqConstant.java
+13
-0
MqConsumer.java
src/main/java/com/mmc/oms/mq/listener/MqConsumer.java
+39
-0
DemandReleaseOrderService.java
...com/mmc/oms/service/demand/DemandReleaseOrderService.java
+4
-0
DemandReleaseOrderServiceImpl.java
...ms/service/demand/Impl/DemandReleaseOrderServiceImpl.java
+0
-0
application-dev.yml
src/main/resources/application-dev.yml
+7
-0
application-prod.yml
src/main/resources/application-prod.yml
+8
-0
DemandReleaseOrderDao.xml
src/main/resources/mapper/demand/DemandReleaseOrderDao.xml
+30
-0
PublishServiceOrderDao.xml
src/main/resources/mapper/demand/PublishServiceOrderDao.xml
+9
-0
TopUpOrderDao.xml
src/main/resources/mapper/topup/TopUpOrderDao.xml
+20
-0
没有找到文件。
kustomization/base/deployment.yaml
浏览文件 @
86fa6dd6
...
...
@@ -76,6 +76,11 @@ spec:
secretKeyRef
:
name
:
iuav-secret
key
:
WECHAT_APPLET_SECRET
-
name
:
RABBITMQ_PASSWORD
valueFrom
:
secretKeyRef
:
name
:
iuav-secret
key
:
RABBITMQ_PASSWORD
volumes
:
-
name
:
log-of-app
hostPath
:
...
...
kustomization/overlays/dev/kustomization.yaml
浏览文件 @
86fa6dd6
...
...
@@ -14,4 +14,4 @@ patches:
images
:
-
name
:
REGISTRY/NAMESPACE/IMAGE:TAG
newName
:
mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/oms
newTag
:
ce4d28ea571f7394271384ad94b0f7a773fdc8a3
newTag
:
5575ae098e3769d73fba04b7148e3b86547b06ed
pom.xml
浏览文件 @
86fa6dd6
...
...
@@ -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>
...
...
@@ -30,7 +35,7 @@
<artifactId>
java-emoji-converter
</artifactId>
<version>
0.1.1
</version>
</dependency>
<dependency>
<groupId>
org.apache.httpcomponents
</groupId>
<artifactId>
httpcore
</artifactId>
...
...
@@ -51,6 +56,18 @@
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-starter-openfeign
</artifactId>
</dependency>
<!-- RabbitMQ -->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-amqp
</artifactId>
</dependency>
<dependency>
<groupId>
com.rabbitmq
</groupId>
<artifactId>
amqp-client
</artifactId>
<version>
5.5.0
</version>
<!-- 支持开源所有版本 -->
</dependency>
<!-- 使用okhttp-feign-连接池技术 -->
<dependency>
<groupId>
io.github.openfeign
</groupId>
...
...
@@ -236,7 +253,14 @@
<build>
<plugins>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-surefire-plugin
</artifactId>
<version>
2.22.2
</version>
<configuration>
<skipTests>
true
</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
...
...
src/main/java/com/mmc/oms/common/util/TDateUtil.java
浏览文件 @
86fa6dd6
...
...
@@ -15,6 +15,7 @@ public class TDateUtil {
public
static
final
String
THREE_MONTH
=
"threemonth"
;
public
static
final
String
SIX_MONTH
=
"sixmonth"
;
public
static
final
String
ONE_YEAR
=
"oneyear"
;
public
static
final
String
TYPE
=
"yyyyMMddHHmmss"
;
public
static
String
getCurrentDate
()
{
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy/MM/dd HH:mm"
);
// 设置日期格式
...
...
src/main/java/com/mmc/oms/controller/UserAddressController.java
浏览文件 @
86fa6dd6
...
...
@@ -14,7 +14,6 @@ import io.swagger.annotations.ApiResponses;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.List
;
...
...
@@ -26,46 +25,47 @@ import java.util.List;
@RestController
@RequestMapping
(
"/user-address/"
)
@Api
(
tags
=
{
"地址管理"
})
public
class
UserAddressController
extends
BaseController
{
public
class
UserAddressController
extends
BaseController
{
@Autowired
private
UserAddressService
userAddressService
;
/**
* 添加地址
*
* @param request
* @param param
* @return
*/
@ApiOperation
(
value
=
"新增用户地址"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)
})
@PostMapping
(
"insert"
)
public
ResultBody
insert
(
HttpServletRequest
request
,
@RequestBody
@Validated
(
Insert
.
class
)
UserAddressVO
param
)
{
return
userAddressService
.
insert
(
param
,
this
.
getCurrentAccount
(
request
));
return
userAddressService
.
insert
(
param
,
this
.
getCurrentAccount
(
request
));
}
@ApiOperation
(
value
=
"编辑用户地址"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)
})
@PostMapping
(
"update"
)
public
ResultBody
update
(
@RequestBody
@Validated
(
Update
.
class
)
UserAddressVO
param
,
HttpServletRequest
request
)
{
return
userAddressService
.
update
(
param
,
this
.
getCurrentAccount
(
request
));
return
userAddressService
.
update
(
param
,
this
.
getCurrentAccount
(
request
));
}
@ApiOperation
(
value
=
"删除用户地址-根据id"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
ResultBody
.
class
)
})
@GetMapping
(
"deleteById"
)
public
ResultBody
deleteById
(
Integer
id
){
public
ResultBody
deleteById
(
Integer
id
)
{
return
userAddressService
.
deleteById
(
id
);
}
@ApiOperation
(
value
=
"根据id查询地址"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserAddressDTO
.
class
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserAddressDTO
.
class
)
})
@GetMapping
(
"getUserAddressInfo"
)
public
UserAddressDTO
getUserAddressInfo
(
@RequestParam
Integer
userAddressId
)
{
return
userAddressService
.
getUserAddressInfo
(
userAddressId
);
public
ResultBody
getUserAddressInfo
(
@RequestParam
Integer
userAddressId
)
{
return
ResultBody
.
success
(
userAddressService
.
getUserAddressInfo
(
userAddressId
)
);
}
@ApiOperation
(
value
=
"查询用户地址列表-条件查询"
)
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserAddressDTO
.
class
)
})
@ApiResponses
({
@ApiResponse
(
code
=
200
,
message
=
"OK"
,
response
=
UserAddressDTO
.
class
)
})
@PostMapping
(
"selectList"
)
public
ResultBody
<
List
<
UserAddressDTO
>>
selectList
(
@RequestBody
UserAddressQO
param
,
HttpServletRequest
request
)
{
return
userAddressService
.
selectList
(
param
,
this
.
getCurrentAccount
(
request
));
...
...
src/main/java/com/mmc/oms/controller/demand/DemandReleaseOrderController.java
浏览文件 @
86fa6dd6
...
...
@@ -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
;
...
...
@@ -16,10 +17,7 @@ import lombok.NoArgsConstructor;
import
org.hibernate.validator.constraints.Length
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.*
;
import
springfox.documentation.annotations.ApiIgnore
;
import
javax.servlet.http.HttpServletRequest
;
...
...
@@ -55,6 +53,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
());
}
...
...
@@ -68,6 +67,24 @@ public class DemandReleaseOrderController extends BaseController {
}
@ApiOperation
(
value
=
"通过id删除订单"
)
@GetMapping
(
"/getDeleteOrder"
)
public
ResultBody
getDelete
(
@ApiParam
(
value
=
"requirementsInfoId"
,
required
=
true
)
@RequestParam
Integer
requirementsInfoId
){
return
releaseOrderService
.
getDelete
(
requirementsInfoId
);
}
@ApiOperation
(
value
=
"通过需求id获取支付编号"
)
@GetMapping
(
"/getPaymentOrderNumber"
)
public
String
getOrderNumber
(
@ApiParam
(
value
=
"requirementsInfoId"
,
required
=
true
)
@RequestParam
Integer
requirementsInfoId
){
return
releaseOrderService
.
getOrderNumber
(
requirementsInfoId
);
}
...
...
src/main/java/com/mmc/oms/controller/demand/commit/NotRepeatSubmit.java
0 → 100644
浏览文件 @
86fa6dd6
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
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
controller
.
demand
.
commit
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.controller.BaseController
;
import
com.mmc.oms.dao.demand.DemandReleaseOrderDao
;
import
com.mmc.oms.entity.demand.GetOrderNumberDO
;
import
com.mmc.oms.entity.demand.GetOrderNumberDTO
;
import
com.mmc.oms.model.vo.demand.CommonPaymentVO
;
import
com.mmc.oms.model.vo.demand.UserPayInfoVO
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.Signature
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.CodeSignature
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.redisson.api.RLock
;
import
org.redisson.api.RedissonClient
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.http.*
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.context.request.RequestContextHolder
;
import
org.springframework.web.context.request.ServletRequestAttributes
;
import
javax.servlet.http.HttpServletRequest
;
import
java.lang.reflect.Method
;
import
java.util.HashMap
;
import
java.util.Map
;
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
;
@Autowired
private
DemandReleaseOrderDao
releaseOrderDao
;
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
@Autowired
private
RestTemplate
restTemplate
;
@Value
(
"${payment.url}"
)
private
String
paymentApp
;
@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
;
MethodSignature
signature
=
(
MethodSignature
)
proceedingJoinPoint
.
getSignature
();
Method
method
=
signature
.
getMethod
();
String
name
=
method
.
getDeclaringClass
().
getName
();
String
[]
parameterNames
=
signature
.
getParameterNames
();
Map
<
String
,
Object
>
map
=
new
HashMap
<
String
,
Object
>();
Object
[]
values
=
proceedingJoinPoint
.
getArgs
();
String
[]
names
=
((
CodeSignature
)
proceedingJoinPoint
.
getSignature
()).
getParameterNames
();
for
(
int
i
=
0
;
i
<
names
.
length
;
i
++)
{
map
.
put
(
names
[
i
],
values
[
i
]);
}
log
.
info
(
map
+
""
);
CommonPaymentVO
commonPaymentsVO
=
(
CommonPaymentVO
)
map
.
get
(
"commonPaymentVO"
);
//尝试获取分布式锁
//-1为永久 leaseTime 最多等待几秒 上锁以后leaseTime秒自动解锁
tryLock
=
accountUriLock
.
tryLock
(-
1
,
leaseTime
,
TimeUnit
.
MILLISECONDS
);
log
.
info
(
"tryLock:"
+
tryLock
);
if
(
tryLock
)
{
try
{
String
orderNumber
=
commonPaymentsVO
.
getOrderNumber
();
String
json
=
stringRedisTemplate
.
opsForValue
().
get
(
orderNumber
);
GetOrderNumberDTO
getOrderNumberDTO
=
JSONObject
.
parseObject
(
json
,
GetOrderNumberDTO
.
class
);
if
(
getOrderNumberDTO
!=
null
){
GetOrderNumberDO
getOrderNumberDO
=
new
GetOrderNumberDO
(
getOrderNumberDTO
);
if
(
getOrderNumberDTO
.
getRequirementsInfoId
()!=
null
){
String
orderNumber1
=
releaseOrderDao
.
getOrderNumber
(
getOrderNumberDO
.
getRequirementsInfoId
());
if
(
orderNumber1
!=
null
){
UserPayInfoVO
userPayInfoVO
=
queryUserPayInfo
(
orderNumber1
,
request
);
if
(
userPayInfoVO
.
getTradeState
()!=
"SUCCESS"
){
releaseOrderDao
.
getDelete
(
getOrderNumberDO
.
getRequirementsInfoId
());
}
}
int
i
=
releaseOrderDao
.
selectOrderNumberDO
(
getOrderNumberDO
.
getRequirementsInfoId
());
if
(
i
!=
0
){
return
ResultBody
.
error
(
"当前需求已有人支付"
);
}
}
}
// 查询订单库存判断是否大于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
;
}
/**
* 通过订单编号查看是否支付成功
*
* @param orderNo
* @return
*/
public
UserPayInfoVO
queryUserPayInfo
(
String
orderNo
,
HttpServletRequest
request
)
{
String
token
=
request
.
getHeader
(
"token"
);
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON
);
headers
.
add
(
"token"
,
token
);
HttpEntity
<
String
>
entity
=
new
HttpEntity
<>(
JSONObject
.
toJSONString
(
orderNo
),
headers
);
ResponseEntity
<
UserPayInfoVO
>
exchange
=
restTemplate
.
exchange
(
paymentApp
+
"wechat/queryUserPayInfo?orderNo="
+
orderNo
,
HttpMethod
.
GET
,
entity
,
UserPayInfoVO
.
class
);
UserPayInfoVO
body
=
exchange
.
getBody
();
return
body
;
}
}
src/main/java/com/mmc/oms/dao/demand/DemandReleaseOrderDao.java
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
dao
.
demand
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.entity.demand.DemandReleaseOrderDO
;
import
com.mmc.oms.entity.demand.GetOrderNumberDO
;
import
com.mmc.oms.model.vo.demand.UserPayInfoVO
;
import
org.apache.ibatis.annotations.Mapper
;
...
...
@@ -20,4 +22,12 @@ public interface DemandReleaseOrderDao {
void
updateOrderDemand
(
DemandReleaseOrderDO
releaseOrderDO
);
DemandReleaseOrderDO
selectPhone
(
String
orderNumber
);
void
insertService
(
GetOrderNumberDO
getOrderNumberDO
);
int
selectOrderNumberDO
(
Integer
requirementsInfoId
);
void
getDelete
(
Integer
requirementsInfoId
);
String
getOrderNumber
(
Integer
requirementsInfoId
);
}
src/main/java/com/mmc/oms/dao/demand/PublishServiceOrderDao.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
dao
.
demand
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @Author small
* @Date 2023/8/19 15:28
* @Version 1.0
*/
@Mapper
public
interface
PublishServiceOrderDao
{
}
src/main/java/com/mmc/oms/dao/topup/TopUpOrderDao.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
dao
.
topup
;
import
com.mmc.oms.entity.topup.TopUpOrderDO
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* @Author LW
* @date 2023/8/23 14:22
* 概要:
*/
@Mapper
public
interface
TopUpOrderDao
{
void
insertTopUpOrder
(
TopUpOrderDO
topUpOrderDO
);
void
updateTopUpOrderInfo
(
TopUpOrderDO
topUpOrderDO
);
}
src/main/java/com/mmc/oms/entity/demand/GetOrderNumberDO.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
entity
.
demand
;
import
com.mmc.oms.model.vo.demand.OrderRequestParamsVO
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.math.BigDecimal
;
/**
* @Author small
* @Date 2023/8/19 17:03
* @Version 1.0
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
GetOrderNumberDO
{
private
Integer
id
;
private
static
final
long
serialVersionUID
=
75097833899496576L
;
@ApiModelProperty
(
value
=
"支付订单编号"
,
example
=
"dadasdas"
)
private
String
paymentOrderNumber
;
@ApiModelProperty
(
value
=
"微信需要支付金额"
,
example
=
"100"
)
private
BigDecimal
weChatPay
;
@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
()
{
return
OrderRequestParamsVO
.
builder
().
orderNo
(
this
.
paymentOrderNumber
)
.
description
(
"发布服务需求支付"
).
orderPort
(
4
)
.
build
();
}
}
src/main/java/com/mmc/oms/entity/demand/GetOrderNumberDTO.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
entity
.
demand
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
/**
* @Author small
* @Date 2023/8/19 16:59
* @Version 1.0
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
GetOrderNumberDTO
implements
Serializable
{
private
static
final
long
serialVersionUID
=
75097833899496576L
;
@ApiModelProperty
(
value
=
"制度订单编号"
,
example
=
"dadasdas"
)
private
String
paymentOrderNumber
;
@ApiModelProperty
(
value
=
"微信需要支付金额"
,
example
=
"100"
)
private
BigDecimal
weChatPay
;
@ApiModelProperty
(
value
=
"用户id"
,
example
=
"100"
,
hidden
=
true
)
private
Integer
userAccountId
;
@ApiModelProperty
(
value
=
"服务id"
)
private
Integer
requirementsInfoId
;
}
src/main/java/com/mmc/oms/entity/topup/TopUpOrderDO.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
entity
.
topup
;
import
com.mmc.oms.model.vo.demand.OrderRequestParamsVO
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.Date
;
/**
* @Author LW
* @date 2023/8/19 13:38
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
TopUpOrderDO
{
private
Integer
id
;
private
Integer
version
;
private
Integer
userAccountId
;
private
String
orderNo
;
private
Integer
amount
;
private
String
tradeState
;
private
String
tradeStateDesc
;
private
String
description
;
private
Date
createTime
;
private
Date
updateTime
;
public
TopUpOrderDO
(
OrderRequestParamsVO
orderRequestParamsVO
,
Integer
userAccountId
)
{
this
.
userAccountId
=
userAccountId
;
this
.
orderNo
=
orderRequestParamsVO
.
getOrderNo
();
this
.
amount
=
orderRequestParamsVO
.
getAmount
();
}
}
src/main/java/com/mmc/oms/feign/UserAppApi.java
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
feign
;
import
com.mmc.oms.model.dto.mall.CooperationTagVO
;
import
com.mmc.oms.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.oms.model.qo.mall.BUserAccountQO
;
//import io.swagger.annotations.ApiParam;
//import org.springframework.cloud.openfeign.FeignClient;
import
org.springframework.web.bind.annotation.*
;
import
java.util.List
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.feign.hystrix.UserAppApiHystrix
;
import
com.mmc.oms.model.vo.wallet.TopUpOrderVO
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
/**
* @author: zj
* @Date: 2023/5/18 17:06
*/
//
@FeignClient(url = "${userapp.url}", name = "cms-svc", fallback = UserAppApiHystrix.class)
@FeignClient
(
url
=
"${userapp.url}"
,
name
=
"cms-svc"
,
fallback
=
UserAppApiHystrix
.
class
)
public
interface
UserAppApi
{
/**
* 根据用户id获取基本信息
* @param userAccountId
* @return
*/
@RequestMapping
(
value
=
"user-account/feignGetUserSimpleInfo"
,
method
=
RequestMethod
.
GET
)
public
UserAccountSimpleDTO
feignGetUserSimpleInfo
(
@RequestParam
Integer
userAccountId
,
@RequestHeader
(
"token"
)
String
token
);
/**
* 根据地区信息查询用户id
* @param provinceCode
* @param cityCode
* @param districtCode
* @return
*/
@GetMapping
(
"user-account/feignListUserAccountIds"
)
List
<
Integer
>
feignListUserAccountIds
(
@RequestParam
Integer
provinceCode
,
@RequestParam
(
required
=
false
)
Integer
cityCode
,
@RequestParam
(
required
=
false
)
Integer
districtCode
,
@RequestHeader
(
value
=
"token"
,
required
=
false
)
String
token
);
/**
* 获取用户集合列表页面
*
* @param bUserAccountQO 问:b用户帐户
* @return {@link List}<{@link UserAccountSimpleDTO}>
*/
@PostMapping
(
"back-user/feignListBAccountPage"
)
List
<
UserAccountSimpleDTO
>
feignListBAccountPage
(
@RequestBody
BUserAccountQO
bUserAccountQO
,
@RequestHeader
(
"token"
)
String
token
);
/**
* 根据用户id查询用户信息
* @param ids
* @param token
* @return
*/
@PostMapping
(
"user-account/feignListUserAccountByIds"
)
List
<
UserAccountSimpleDTO
>
feignListUserAccountByIds
(
@RequestBody
List
<
Integer
>
ids
,
@RequestHeader
(
"token"
)
String
token
);
/**
* 查询推荐人信息
* @param userIds
* @return
*/
@PostMapping
(
"user-account/feignListRcdUserInfo"
)
List
<
UserAccountSimpleDTO
>
feignListRcdUserInfo
(
@RequestBody
List
<
Integer
>
userIds
);
/**
* 查询上级id
* @param userAccountId
* @return
*/
@GetMapping
(
"user-account/feignGetSuperiorRef"
)
Integer
feignGetSuperiorRef
(
@RequestParam
Integer
userAccountId
);
/**
* 查询上级推荐人信息
* @param userAccountId
* @return
*/
@GetMapping
(
"user-account/feignGetUserRcdInfo"
)
UserAccountSimpleDTO
feignGetUserRcdInfo
(
@RequestParam
Integer
userAccountId
);
/**
* 用户合作标签
* @return
*/
@GetMapping
(
"cooperation/feignListCooperationTag"
)
List
<
CooperationTagVO
>
feignListCooperationTag
();
@PostMapping
(
"pay/feignTopUpCash"
)
public
ResultBody
feignTopUpCash
(
@RequestBody
TopUpOrderVO
topUpOrderVO
);
}
src/main/java/com/mmc/oms/feign/config/FeignConfiguration.java
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
feign
.
config
;
import
com.mmc.oms.feign.hystrix.PmsAppApiHystrix
;
import
com.mmc.oms.feign.hystrix.UserAppApiHystrix
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.Configuration
;
...
...
@@ -14,8 +15,13 @@ import org.springframework.context.annotation.Configuration;
public
class
FeignConfiguration
{
@Bean
(
name
=
"pmsAppApiHystrix"
)
public
PmsAppApiHystrix
P
msAppApi
()
{
public
PmsAppApiHystrix
p
msAppApi
()
{
return
new
PmsAppApiHystrix
();
}
@Bean
(
name
=
"userAppApiHystrix"
)
public
UserAppApiHystrix
userAppApi
()
{
return
new
UserAppApiHystrix
();
}
}
src/main/java/com/mmc/oms/feign/hystrix/UserAppApiHystrix.java
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
feign
.
hystrix
;
import
com.mmc.oms.common.result.ResultBody
;
import
com.mmc.oms.feign.UserAppApi
;
import
com.mmc.oms.model.dto.mall.CooperationTagVO
;
import
com.mmc.oms.model.dto.user.UserAccountSimpleDTO
;
import
com.mmc.oms.model.qo.mall.BUserAccountQO
;
import
com.mmc.oms.model.vo.wallet.TopUpOrderVO
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.List
;
/**
* @author: zj
* @Date: 2023/5/18 17:08
*/
@Slf4j
public
class
UserAppApiHystrix
implements
UserAppApi
{
@Override
public
UserAccountSimpleDTO
feignGetUserSimpleInfo
(
Integer
userAccountId
,
String
token
)
{
log
.
error
(
"熔断:feignGetUserSimpleInfo:{}"
,
userAccountId
);
return
null
;
}
@Override
public
List
<
Integer
>
feignListUserAccountIds
(
Integer
provinceCode
,
Integer
cityCode
,
Integer
districtCode
,
String
token
)
{
log
.
error
(
"熔断:feignListUserAccountIds:{}, {}, {}"
,
provinceCode
,
cityCode
,
districtCode
);
return
null
;
}
@Override
public
List
<
UserAccountSimpleDTO
>
feignListBAccountPage
(
BUserAccountQO
bUserAccountQO
,
String
token
)
{
log
.
error
(
"熔断:feignListBAccountPage:{}"
,
bUserAccountQO
);
return
null
;
}
@Override
public
List
<
UserAccountSimpleDTO
>
feignListUserAccountByIds
(
List
<
Integer
>
ids
,
String
token
)
{
log
.
error
(
"熔断:feignListUserAccountByIds:{}"
,
ids
);
return
null
;
}
@Override
public
List
<
UserAccountSimpleDTO
>
feignListRcdUserInfo
(
List
<
Integer
>
userIds
)
{
log
.
error
(
"熔断:feignListRcdUserInfo:{}"
,
userIds
);
return
null
;
}
@Override
public
Integer
feignGetSuperiorRef
(
Integer
userAccountId
)
{
log
.
error
(
"熔断:feignGetSuperiorRef:{}"
,
userAccountId
);
return
null
;
}
@Override
public
UserAccountSimpleDTO
feignGetUserRcdInfo
(
Integer
userAccountId
)
{
log
.
error
(
"熔断:feignGetUserRcdInfo:{}"
,
userAccountId
);
return
null
;
}
@Override
public
List
<
CooperationTagVO
>
feignListCooperationTag
(
)
{
log
.
error
(
"熔断:
feignListCooperationTag:{}"
);
return
null
;
public
ResultBody
feignTopUpCash
(
TopUpOrderVO
topUpOrderVO
)
{
log
.
error
(
"熔断:
UserAppApiHystrix.feignTopUpCash==error==>param:{}"
,
topUpOrderVO
);
return
ResultBody
.
error
(
"-1"
,
"远程调用失败"
)
;
}
}
src/main/java/com/mmc/oms/model/vo/demand/CommonPaymentVO.java
浏览文件 @
86fa6dd6
...
...
@@ -18,10 +18,13 @@ import lombok.NoArgsConstructor;
public
class
CommonPaymentVO
{
@ApiModelProperty
(
value
=
"订单编号"
,
example
=
"R202307251459553408130"
)
@ApiModelProperty
(
value
=
"订单编号"
,
example
=
"R202307251459553408130"
)
private
String
orderNumber
;
@ApiModelProperty
(
value
=
"订单来源 0:产品商城 1:租赁订单 2:培训订单 3发布需求 ...其他后续加"
)
@ApiModelProperty
(
value
=
"订单来源 0:产品商城 1:租赁订单 2:培训订单 3发布需求
4服务需求发布 5充值
...其他后续加"
)
private
Integer
orderPort
;
@ApiModelProperty
(
value
=
"金额:单位(分)"
)
private
Integer
amount
;
}
src/main/java/com/mmc/oms/model/vo/demand/OrderRequestParamsVO.java
浏览文件 @
86fa6dd6
...
...
@@ -26,4 +26,6 @@ public class OrderRequestParamsVO implements Serializable {
private
Integer
amount
;
@ApiModelProperty
(
value
=
"订单来源 0:产品商城 1:租赁订单 2:培训订单 ...其他后续加"
)
private
Integer
orderPort
;
@ApiModelProperty
(
value
=
"附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用,实际情况下只有支付完成状态才会返回该字段。"
)
private
String
attach
;
}
src/main/java/com/mmc/oms/model/vo/wallet/TopUpOrderVO.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
model
.
vo
.
wallet
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* @Author LW
* @date 2023/8/23 13:37
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public
class
TopUpOrderVO
{
@ApiModelProperty
(
value
=
"支付用户的openid"
)
private
String
openid
;
@ApiModelProperty
(
value
=
"订单编号"
)
private
String
orderNo
;
@ApiModelProperty
(
value
=
"金额(分)"
)
private
Integer
amount
;
@ApiModelProperty
(
value
=
"订单状态"
)
private
String
tradeState
;
@ApiModelProperty
(
value
=
"交易状态描述"
)
private
String
tradeStateDesc
;
}
src/main/java/com/mmc/oms/mq/constant/RabbitmqConstant.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
mq
.
constant
;
/**
* @author: lw
* @Date: 2023/8/23 11:26
*/
public
class
RabbitmqConstant
{
public
final
static
String
USER_TOP_UP_DIRECT_EXCHANGE
=
"USER_TOP_UP_DIRECT_EXCHANGE"
;
public
final
static
String
USER_TOP_UP_DIRECT_QUEUE
=
"USER_TOP_UP_DIRECT_QUEUE"
;
public
final
static
String
USER_TOP_UP_ROUTING_KEY
=
"USER_TOP_UP_ROUTING_KEY"
;
}
src/main/java/com/mmc/oms/mq/listener/MqConsumer.java
0 → 100644
浏览文件 @
86fa6dd6
package
com
.
mmc
.
oms
.
mq
.
listener
;
import
com.alibaba.fastjson.JSONObject
;
import
com.mmc.oms.dao.topup.TopUpOrderDao
;
import
com.mmc.oms.entity.topup.TopUpOrderDO
;
import
com.mmc.oms.model.vo.wallet.TopUpOrderVO
;
import
com.mmc.oms.mq.constant.RabbitmqConstant
;
import
com.rabbitmq.client.Channel
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.amqp.core.Message
;
import
org.springframework.amqp.rabbit.annotation.RabbitListener
;
import
org.springframework.messaging.handler.annotation.Payload
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.Resource
;
/**
* @Author LW
* @date 2023/6/29 10:35 概要:
*/
@Slf4j
@Component
public
class
MqConsumer
{
@Resource
TopUpOrderDao
topUpOrderDao
;
@RabbitListener
(
queues
=
RabbitmqConstant
.
USER_TOP_UP_DIRECT_QUEUE
)
public
void
subscribeDirectQueue
(
@Payload
String
topUpOrder
,
Channel
channel
,
Message
message
)
{
TopUpOrderVO
topUpOrderVO
=
JSONObject
.
parseObject
(
topUpOrder
,
TopUpOrderVO
.
class
);
log
.
info
(
"<==========用户充值订单消费开始:订单信息是---->{}==========>"
,
topUpOrderVO
);
// 根据消费的消息修改充值订单的信息
TopUpOrderDO
topUpOrderDO
=
new
TopUpOrderDO
();
topUpOrderDO
.
setTradeState
(
topUpOrderVO
.
getTradeState
());
topUpOrderDO
.
setTradeStateDesc
(
topUpOrderVO
.
getTradeStateDesc
());
topUpOrderDO
.
setOrderNo
(
topUpOrderVO
.
getOrderNo
());
topUpOrderDao
.
updateTopUpOrderInfo
(
topUpOrderDO
);
log
.
info
(
"<==========用户充值订单消费结束==========>"
);
}
}
src/main/java/com/mmc/oms/service/demand/DemandReleaseOrderService.java
浏览文件 @
86fa6dd6
...
...
@@ -19,4 +19,8 @@ public interface DemandReleaseOrderService {
ResultBody
orderPayment
(
CommonPaymentVO
commonPaymentVO
,
HttpServletRequest
request
,
Integer
userAccountId
);
ResultBody
getPublishPhone
(
CommonPaymentVO
commonPaymentVO
,
HttpServletRequest
request
,
Integer
userAccountId
);
ResultBody
getDelete
(
Integer
requirementsInfoId
);
String
getOrderNumber
(
Integer
requirementsInfoId
);
}
src/main/java/com/mmc/oms/service/demand/Impl/DemandReleaseOrderServiceImpl.java
浏览文件 @
86fa6dd6
差异被折叠。
点击展开。
src/main/resources/application-dev.yml
浏览文件 @
86fa6dd6
...
...
@@ -13,6 +13,13 @@ spring:
jedis
:
pool
:
max-active
:
2
#rabbitMQ
rabbitmq
:
host
:
amqp-cn-zvp2ozhnj001.cn-shenzhen.amqp-0.vpc.mq.amqp.aliyuncs.com
port
:
5672
username
:
MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password
:
${RABBITMQ_PASSWORD}
virtual-host
:
dev
main
:
allow-circular-references
:
true
...
...
src/main/resources/application-prod.yml
浏览文件 @
86fa6dd6
...
...
@@ -16,6 +16,14 @@ spring:
main
:
allow-circular-references
:
true
#rabbitMQ
rabbitmq
:
host
:
amqp-cn-zvp2ozhnj001.cn-shenzhen.amqp-0.vpc.mq.amqp.aliyuncs.com
port
:
5672
username
:
MjphbXFwLWNuLXp2cDJvemhuajAwMTpMVEFJNEZ6Q3B5ckEzM1BlZ254V1M2WFY=
password
:
${RABBITMQ_PASSWORD}
virtual-host
:
prod
springfox
:
documentation
:
swagger-ui
:
...
...
src/main/resources/mapper/demand/DemandReleaseOrderDao.xml
浏览文件 @
86fa6dd6
...
...
@@ -37,4 +37,34 @@
<select
id=
"selectPhone"
resultType=
"com.mmc.oms.entity.demand.DemandReleaseOrderDO"
>
select publish_phone,requirements_info_id,user_account_id,order_number from demand_release_order where order_number = #{orderNumber}
</select>
<insert
id=
"insertService"
parameterType=
"com.mmc.oms.entity.demand.GetOrderNumberDO"
keyProperty=
"id"
useGeneratedKeys=
"true"
>
INSERT INTO service_demand_order(payment_order_number, we_chat_pay, user_account_id, create_time,update_time,requirements_info_id)
VALUES (#{paymentOrderNumber}, #{weChatPay},#{userAccountId},NOW(),NOW(),#{requirementsInfoId});
</insert>
<select
id=
"selectOrderNumberDO"
resultType=
"java.lang.Integer"
>
SELECT
count(*)
FROM
service_demand_order
WHERE
requirements_info_id =#{requirementsInfoId}
</select>
<delete
id=
"getDelete"
>
delete
from service_demand_order
where requirements_info_id = #{requirementsInfoId}
</delete>
<select
id=
"getOrderNumber"
resultType=
"java.lang.String"
>
SELECT
payment_order_number
FROM
service_demand_order
WHERE
requirements_info_id =#{requirementsInfoId}
</select>
</mapper>
src/main/resources/mapper/demand/PublishServiceOrderDao.xml
0 → 100644
浏览文件 @
86fa6dd6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.oms.dao.demand.PublishServiceOrderDao"
>
</mapper>
src/main/resources/mapper/topup/TopUpOrderDao.xml
0 → 100644
浏览文件 @
86fa6dd6
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.mmc.oms.dao.topup.TopUpOrderDao"
>
<insert
id=
"insertTopUpOrder"
>
insert into top_up_order (user_account_id,
order_no,
amount,
trade_state,
description)
values (#{userAccountId}, #{orderNo}, #{amount}, #{tradeState}, #{description})
</insert>
<update
id=
"updateTopUpOrderInfo"
>
update top_up_order
set trade_state = #{tradeState},
trade_state_desc = #{tradeStateDesc}
where order_no = #{orderNo}
</update>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论