Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
O
online-edu-backend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
online-edu
online-edu-backend
Commits
dc174da3
Commit
dc174da3
authored
Jun 07, 2021
by
liuyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成微信H5下单处理
parent
2fb69d4c
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
140 additions
and
55 deletions
+140
-55
TeacherController.java
...m/qkdata/biz/management/controller/TeacherController.java
+2
-0
ProductOrderPO.java
...java/com/qkdata/biz/management/entity/ProductOrderPO.java
+4
-0
ProductOrderService.java
...om/qkdata/biz/management/service/ProductOrderService.java
+44
-28
QueryProductOrderModel.java
.../com/qkdata/biz/management/vo/QueryProductOrderModel.java
+2
-0
FrontendProductOrderController.java
...ta/biz/web/controller/FrontendProductOrderController.java
+66
-0
MyEnterpriseController.java
...com/qkdata/biz/web/controller/MyEnterpriseController.java
+8
-9
UserCenterController.java
...a/com/qkdata/biz/web/controller/UserCenterController.java
+1
-15
CreateOrderModel.java
src/main/java/com/qkdata/biz/web/vo/CreateOrderModel.java
+6
-2
WxPayNotifyController.java
...a/com/qkdata/wx/pay/controller/WxPayNotifyController.java
+1
-1
V1.0.8__update.sql
src/main/resources/db/migration/V1.0.8__update.sql
+3
-0
product_orderMapper.xml
...main/resources/mappers/management/product_orderMapper.xml
+3
-0
No files found.
src/main/java/com/qkdata/biz/management/controller/TeacherController.java
View file @
dc174da3
...
...
@@ -8,6 +8,7 @@ import com.qkdata.biz.management.vo.TeacherModel;
import
com.qkdata.common.annotation.SysLog
;
import
com.qkdata.common.base.model.PageResult
;
import
com.qkdata.common.base.model.Result
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.shiro.authz.annotation.Logical
;
import
org.apache.shiro.authz.annotation.RequiresRoles
;
...
...
@@ -28,6 +29,7 @@ import java.util.List;
* @author liuyang
* @since 2021-05-18
*/
@Api
(
tags
=
"讲师管理"
)
@RestController
@RequestMapping
(
"/api/mgr/teacher"
)
public
class
TeacherController
{
...
...
src/main/java/com/qkdata/biz/management/entity/ProductOrderPO.java
View file @
dc174da3
...
...
@@ -38,6 +38,10 @@ public class ProductOrderPO extends BasePO {
* 用户ID
*/
private
Long
userId
;
/**
* 用户所属企业ID
*/
private
Long
orgId
;
/**
* 产品类型(个人包月、企业包月、付费点播)
...
...
src/main/java/com/qkdata/biz/management/service/ProductOrderService.java
View file @
dc174da3
...
...
@@ -7,8 +7,6 @@ import cn.hutool.core.util.RandomUtil;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult
;
import
com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest
;
import
com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
...
...
@@ -17,12 +15,10 @@ import com.qkdata.biz.common.BizConstants;
import
com.qkdata.biz.enums.*
;
import
com.qkdata.biz.management.entity.CoursePO
;
import
com.qkdata.biz.management.entity.ProductOrderPO
;
import
com.qkdata.biz.management.entity.UserCourseAuthPO
;
import
com.qkdata.biz.management.mapper.ProductOrderMapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.qkdata.biz.management.vo.ProductOrderModel
;
import
com.qkdata.biz.management.vo.QueryProductOrderModel
;
import
com.qkdata.biz.sys.entity.SysUserPO
;
import
com.qkdata.biz.sys.service.SysConfigService
;
import
com.qkdata.biz.sys.service.SysRoleService
;
import
com.qkdata.biz.sys.service.SysUserService
;
...
...
@@ -31,15 +27,15 @@ import com.qkdata.biz.web.vo.*;
import
com.qkdata.common.base.enums.CodeEnum
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.base.model.PageResult
;
import
com.qkdata.common.base.model.Result
;
import
com.qkdata.common.util.HttpContextUtils
;
import
com.qkdata.common.util.IPUtils
;
import
com.qkdata.common.util.UserContext
;
import
com.qkdata.wx.pay.config.WxPayProperties
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.sql.DataSource
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
import
java.util.List
;
...
...
@@ -72,12 +68,6 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
@Autowired
private
OrgSurplusService
orgSurplusService
;
public
void
createOrder
(
UserBuyVIPModel
model
)
{
}
private
String
generateOrderNo
()
{
DateTime
nowDateTime
=
DateUtil
.
date
();
String
dateStr
=
DateUtil
.
format
(
nowDateTime
,
"yyyyMMddHHmmssSSS"
);
...
...
@@ -107,29 +97,38 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
return
wxService
.
createOrder
(
payRequest
);
}
public
CreateOrderResult
userBuyVIP
(
UserBuyVIPModel
model
)
{
@Transactional
public
CreateOrderResult
createOrder
(
CreateOrderModel
model
)
{
CreateOrderResult
result
=
new
CreateOrderResult
();
ProductOrderPO
orderPO
=
createPO
(
ProductTypeEnum
.
USER_VIP
,
model
.
getCount
(),
model
.
getPayMethod
(),
model
.
getCourseId
());
ProductOrderPO
orderPO
=
createPO
(
model
);
save
(
orderPO
);
result
.
setOrderNo
(
orderPO
.
getOrderNo
());
Object
rtObj
=
prePay
(
orderPO
,
model
.
getSource
());
result
.
setResult
(
rtObj
);
return
result
;
}
private
Object
prePay
(
ProductOrderPO
orderPO
,
PaySourceEnum
source
){
if
(
orderPO
.
getPayMethod
()
==
PayMethodEnum
.
WeiXin
){
try
{
Object
rtObj
=
wxCreateOrder
(
orderPO
,
model
.
getSource
());
result
.
setResult
(
rtObj
);
save
(
orderPO
);
return
result
;
Object
rtObj
=
wxCreateOrder
(
orderPO
,
source
);
return
rtObj
;
}
catch
(
WxPayException
e
)
{
log
.
error
(
e
.
getMessage
(),
e
);
throw
new
BusinessException
(
"微信支付异常"
);
}
}
else
if
(
orderPO
.
getPayMethod
()
==
PayMethodEnum
.
AliPay
){
return
result
;
//todo
return
null
;
}
return
result
;
return
null
;
}
private
ProductOrderPO
createPO
(
ProductTypeEnum
productType
,
int
count
,
PayMethodEnum
payMehtod
,
Long
courseId
){
private
ProductOrderPO
createPO
(
CreateOrderModel
model
){
ProductOrderPO
po
=
new
ProductOrderPO
();
po
.
setOrderNo
(
generateOrderNo
());
po
.
setProductType
(
productType
);
po
.
setProductType
(
model
.
getProductType
());
FullUserInfo
userInfo
=
sysUserService
.
findFullUserInfo
(
model
.
getUsername
());
switch
(
po
.
getProductType
()){
case
USER_VIP:
po
.
setOrderName
(
"会员包月"
);
...
...
@@ -146,29 +145,30 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
throw
new
BusinessException
(
"处理错误,尚未配置企业会员价格"
);
}
po
.
setProductPrice
(
new
BigDecimal
(
enterpriseVipPriceStr
));
po
.
setOrgId
(
userInfo
.
getEnterpriseId
());
break
;
case
COURSE_BUY:
CoursePO
coursePO
=
courseService
.
getById
(
courseId
);
case
ENTERPRISE_COURSE_BUY:
case
COURSE_BUY:
CoursePO
coursePO
=
courseService
.
getById
(
model
.
getCourseId
()
);
if
(
coursePO
==
null
){
throw
new
BusinessException
(
"请求错误,课程不存在"
);
}
String
orderName
=
"付费点播:{}"
;
po
.
setOrderName
(
StrUtil
.
format
(
orderName
,
coursePO
.
getName
()));
FullUserInfo
userInfo
=
sysUserService
.
findFullUserInfo
(
UserContext
.
getUser
().
getUsername
());
if
(
userInfo
.
getType
()
==
AccountTypeEnum
.
USER
){
po
.
setProductPrice
(
coursePO
.
getPrice
());
}
else
{
po
.
setProductPrice
(
coursePO
.
getVipPrice
());
}
po
.
setOrgId
(
userInfo
.
getEnterpriseId
());
break
;
default
:
throw
new
BusinessException
(
"购买产品类型错误"
);
}
po
.
setProductCount
(
count
);
po
.
setProductCount
(
model
.
getCount
()
);
po
.
setOrderMoney
(
po
.
getProductPrice
().
multiply
(
new
BigDecimal
(
po
.
getProductCount
())));
po
.
setPaymentMoney
(
po
.
getOrderMoney
());
po
.
setCourseId
(
courseId
);
po
.
setPayMethod
(
payMehtod
);
po
.
setCourseId
(
model
.
getCourseId
()
);
po
.
setPayMethod
(
model
.
getPayMethod
()
);
po
.
setStatus
(
ProductOrderStatusEnum
.
WAIT_PAY
);
po
.
setUserId
(
UserContext
.
getUserId
());
return
po
;
...
...
@@ -197,6 +197,7 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
}
WxPayOrderQueryResult
queryResult
=
wxService
.
queryOrder
(
null
,
orderNo
);
if
(
"SUCCESS"
.
equals
(
queryResult
.
getTradeState
())){
updateStatus
(
orderNo
,
ProductOrderStatusEnum
.
PAY_COMPLETE
);
return
ProductOrderStatusEnum
.
PAY_COMPLETE
;
}
else
{
return
ProductOrderStatusEnum
.
PAY_FAILD
;
...
...
@@ -257,4 +258,18 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
}
public
CreateOrderResult
payAgain
(
String
orderNo
,
PaySourceEnum
source
)
{
ProductOrderPO
orderPO
=
getByOrderNo
(
orderNo
);
if
(
orderPO
==
null
){
throw
new
BusinessException
(
"请求错误,订单不存在"
);
}
if
(
orderPO
.
getStatus
()
==
ProductOrderStatusEnum
.
PAY_COMPLETE
){
throw
new
BusinessException
(
"订单已完成,请不要重覆支付"
);
}
CreateOrderResult
result
=
new
CreateOrderResult
();
result
.
setOrderNo
(
orderNo
);
Object
rtObj
=
prePay
(
orderPO
,
source
);
result
.
setResult
(
rtObj
);
return
result
;
}
}
\ No newline at end of file
src/main/java/com/qkdata/biz/management/vo/QueryProductOrderModel.java
View file @
dc174da3
...
...
@@ -8,4 +8,6 @@ public class QueryProductOrderModel {
private
int
pageIndex
=
Constants
.
DEFAULT_PAGE
;
private
int
pageSize
=
Constants
.
DEFAULT_PAGE_SIZE
;
private
String
username
;
private
boolean
isEnterprise
=
false
;
private
Long
orgId
;
}
src/main/java/com/qkdata/biz/web/controller/FrontendProductOrderController.java
0 → 100644
View file @
dc174da3
package
com
.
qkdata
.
biz
.
web
.
controller
;
import
com.qkdata.biz.common.BizConstants
;
import
com.qkdata.biz.enums.PaySourceEnum
;
import
com.qkdata.biz.enums.ProductOrderStatusEnum
;
import
com.qkdata.biz.enums.ProductTypeEnum
;
import
com.qkdata.biz.management.entity.CoursePO
;
import
com.qkdata.biz.management.service.CourseService
;
import
com.qkdata.biz.management.service.ProductOrderService
;
import
com.qkdata.biz.web.vo.CreateOrderModel
;
import
com.qkdata.biz.web.vo.CreateOrderResult
;
import
com.qkdata.common.base.exception.BusinessException
;
import
com.qkdata.common.base.model.Result
;
import
com.qkdata.common.util.UserContext
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.apache.shiro.authz.annotation.Logical
;
import
org.apache.shiro.authz.annotation.RequiresRoles
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
@Api
(
tags
=
"用户下单处理-手机端"
)
@RestController
@RequestMapping
(
"/api/productOrder"
)
public
class
FrontendProductOrderController
{
@Autowired
private
ProductOrderService
orderService
;
@Autowired
private
CourseService
courseService
;
@ApiOperation
(
"购买时新建订单"
)
@PostMapping
(
"/createOrder"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_USER
,
BizConstants
.
ROLE_ENTERPRISE_ADMIN
},
logical
=
Logical
.
OR
)
public
Result
<
CreateOrderResult
>
createOrder
(
@RequestBody
CreateOrderModel
model
){
model
.
setUserId
(
UserContext
.
getUserId
());
model
.
setUsername
(
UserContext
.
getUser
().
getUsername
());
if
(
model
.
getProductType
()
==
ProductTypeEnum
.
ENTERPRISE_COURSE_BUY
||
model
.
getProductType
()
==
ProductTypeEnum
.
COURSE_BUY
){
if
(
model
.
getCourseId
()
==
null
){
throw
new
BusinessException
(
"请求错误,课程ID不能为空"
);
}
CoursePO
coursePO
=
courseService
.
getById
(
model
.
getCourseId
());
if
(
coursePO
==
null
){
throw
new
BusinessException
(
"请求错误,课程不存在"
);
}
}
if
(
model
.
getCount
()
<=
0
){
throw
new
BusinessException
(
"请求错误,购买数量不能为0"
);
}
CreateOrderResult
result
=
orderService
.
createOrder
(
model
);
return
Result
.
succeed
(
result
);
}
@ApiOperation
(
"查询订单状态"
)
@GetMapping
(
"/user/queryOrderStatus"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_USER
,
BizConstants
.
ROLE_ENTERPRISE_ADMIN
},
logical
=
Logical
.
OR
)
public
Result
<
ProductOrderStatusEnum
>
queryOrderStatus
(
@RequestParam
String
orderNo
){
ProductOrderStatusEnum
status
=
orderService
.
queryStatus
(
orderNo
);
return
Result
.
succeed
(
status
);
}
@ApiOperation
(
"重新支付"
)
@PostMapping
(
"/payAgain"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_USER
,
BizConstants
.
ROLE_ENTERPRISE_ADMIN
},
logical
=
Logical
.
OR
)
public
Result
<
CreateOrderResult
>
payAgain
(
@RequestParam
String
orderNo
,
@RequestParam
PaySourceEnum
source
){
CreateOrderResult
result
=
orderService
.
payAgain
(
orderNo
,
source
);
return
Result
.
succeed
(
result
);
}
}
src/main/java/com/qkdata/biz/web/controller/MyEnterpriseController.java
View file @
dc174da3
...
...
@@ -8,7 +8,6 @@ import com.qkdata.biz.enums.OrgTypeEnum;
import
com.qkdata.biz.enums.ProductTypeEnum
;
import
com.qkdata.biz.management.entity.OrgSurplusPO
;
import
com.qkdata.biz.management.entity.OrganizationPO
;
import
com.qkdata.biz.management.mapper.CourseMapper
;
import
com.qkdata.biz.management.service.*
;
import
com.qkdata.biz.management.vo.*
;
import
com.qkdata.biz.sys.service.SysUserService
;
...
...
@@ -24,7 +23,6 @@ import org.apache.shiro.authz.annotation.RequiresRoles;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.rmi.MarshalledObject
;
import
java.util.Map
;
@Api
(
tags
=
"我的企业相关接口-手机端"
)
...
...
@@ -169,12 +167,13 @@ public class MyEnterpriseController {
return
Result
.
succeed
(
"ok"
);
}
// @ApiOperation("企业购买记录列表")
// @PostMapping("/order/list")
// @RequiresRoles(value = {BizConstants.ROLE_ENTERPRISE_ADMIN})
// public PageResult<ProductOrderModel> userOrderList(@RequestBody QueryProductOrderModel model){
// model.setUsername(UserContext.getUser().getUsername());
// return orderService.queryPageList(model);
// }
@ApiOperation
(
"企业购买记录列表"
)
@PostMapping
(
"/order/list"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_ENTERPRISE_ADMIN
})
public
PageResult
<
ProductOrderModel
>
userOrderList
(
@RequestBody
QueryProductOrderModel
model
){
model
.
setEnterprise
(
true
);
model
.
setOrgId
(
userService
.
getUserEnterpriesId
(
UserContext
.
getUserId
()));
return
orderService
.
queryPageList
(
model
);
}
}
src/main/java/com/qkdata/biz/web/controller/UserCenterController.java
View file @
dc174da3
...
...
@@ -2,7 +2,6 @@ package com.qkdata.biz.web.controller;
import
com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthResponse
;
import
com.qkdata.biz.common.BizConstants
;
import
com.qkdata.biz.enums.ProductOrderStatusEnum
;
import
com.qkdata.biz.management.service.CourseService
;
import
com.qkdata.biz.management.service.ProductOrderService
;
import
com.qkdata.biz.management.vo.ProductOrderModel
;
...
...
@@ -98,20 +97,7 @@ public class UserCenterController {
return
Result
.
succeed
(
response
);
}
@ApiOperation
(
"个人购买创建订单"
)
@PostMapping
(
"/user/createOrder"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_USER
,
BizConstants
.
ROLE_ENTERPRISE_ADMIN
},
logical
=
Logical
.
OR
)
public
Result
<
CreateOrderResult
>
createOrder
(
@RequestBody
UserBuyVIPModel
model
){
CreateOrderResult
result
=
orderService
.
userBuyVIP
(
model
);
return
Result
.
succeed
(
result
);
}
@ApiOperation
(
"查询订单状态"
)
@GetMapping
(
"/user/queryOrderStatus"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_USER
,
BizConstants
.
ROLE_ENTERPRISE_ADMIN
},
logical
=
Logical
.
OR
)
public
Result
<
ProductOrderStatusEnum
>
queryOrderStatus
(
@RequestParam
String
orderNo
){
ProductOrderStatusEnum
status
=
orderService
.
queryStatus
(
orderNo
);
return
Result
.
succeed
(
status
);
}
@ApiOperation
(
"已购课程列表"
)
@PostMapping
(
"/course/buy/list"
)
@RequiresRoles
(
value
=
{
BizConstants
.
ROLE_USER
,
BizConstants
.
ROLE_ENTERPRISE_ADMIN
},
logical
=
Logical
.
OR
)
...
...
src/main/java/com/qkdata/biz/web/vo/
UserBuyVIP
Model.java
→
src/main/java/com/qkdata/biz/web/vo/
CreateOrder
Model.java
View file @
dc174da3
...
...
@@ -2,13 +2,17 @@ package com.qkdata.biz.web.vo;
import
com.qkdata.biz.enums.PayMethodEnum
;
import
com.qkdata.biz.enums.PaySourceEnum
;
import
com.qkdata.biz.enums.ProductTypeEnum
;
import
lombok.Data
;
/**
*
个人购买VIP
请求参数
*
创建订单
请求参数
*/
@Data
public
class
UserBuyVIPModel
{
public
class
CreateOrderModel
{
private
Long
userId
;
private
String
username
;
private
ProductTypeEnum
productType
;
private
int
count
;
private
Long
courseId
;
private
PayMethodEnum
payMethod
;
...
...
src/main/java/com/qkdata/wx/pay/controller/WxPayNotifyController.java
View file @
dc174da3
...
...
@@ -36,9 +36,9 @@ public class WxPayNotifyController {
try
{
final
WxPayOrderNotifyResult
notifyResult
=
this
.
wxPayService
.
parseOrderNotifyResult
(
xmlData
);
log
.
info
(
notifyResult
.
toString
());
outTradeNo
=
notifyResult
.
getOutTradeNo
();
notifyResult
.
checkResult
(
wxPayService
,
notifyResult
.
getSignType
(),
true
);
outTradeNo
=
notifyResult
.
getOutTradeNo
();
orderService
.
orderComplete
(
outTradeNo
);
}
catch
(
WxPayException
e
){
...
...
src/main/resources/db/migration/V1.0.8__update.sql
0 → 100644
View file @
dc174da3
ALTER
TABLE
`product_order`
ADD
COLUMN
`org_id`
bigint
(
20
)
NULL
AFTER
`user_id`
;
\ No newline at end of file
src/main/resources/mappers/management/product_orderMapper.xml
View file @
dc174da3
...
...
@@ -12,6 +12,9 @@
<if
test=
"p.username != null and p.username != ''"
>
and u.username like concat ('%',#{p.username},'%')
</if>
<if
test=
"p.orgId != null"
>
and o.org_id = #{p.orgId}
</if>
order by `status` DESC,create_time DESC
</select>
</mapper>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment