Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
SiEn
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
SiEn
Commits
435053c1
Commit
435053c1
authored
Mar 11, 2021
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vip开通
parent
45b6b497
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
593 additions
and
46 deletions
+593
-46
common/src/main/java/com/sien/common/controller/VipPriceController.java
+102
-0
common/src/main/java/com/sien/common/controller/VipRecordController.java
+7
-6
common/src/main/java/com/sien/common/controller/WxPayController.java
+10
-9
common/src/main/java/com/sien/common/entity/VipPrice.java
+50
-0
common/src/main/java/com/sien/common/entity/VipRecord.java
+3
-4
common/src/main/java/com/sien/common/mapper/VipPriceMapper.java
+40
-0
common/src/main/java/com/sien/common/param/VipPricePageParam.java
+23
-0
common/src/main/java/com/sien/common/param/VipRecordOpenParam.java
+5
-6
common/src/main/java/com/sien/common/service/DonationRecordService.java
+1
-1
common/src/main/java/com/sien/common/service/VipPriceService.java
+62
-0
common/src/main/java/com/sien/common/service/VipRecordService.java
+10
-1
common/src/main/java/com/sien/common/service/impl/DonationRecordServiceImpl.java
+6
-5
common/src/main/java/com/sien/common/service/impl/VipPriceServiceImpl.java
+62
-0
common/src/main/java/com/sien/common/service/impl/VipRecordServiceImpl.java
+143
-13
common/src/main/java/com/sien/common/vo/app/VipPriceQueryVo.java
+44
-0
common/src/main/resources/mapper/VipPriceMapper.xml
+24
-0
common/src/main/resources/mapper/VipRecordMapper.xml
+1
-1
No files found.
common/src/main/java/com/sien/common/controller/VipPriceController.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
controller
;
import
com.sien.common.entity.VipPrice
;
import
com.sien.common.service.VipPriceService
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.controller.BaseController
;
import
io.geekidea.springbootplus.framework.log.annotation.OperationLog
;
import
io.geekidea.springbootplus.framework.log.enums.OperationLogType
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
/**
* 会员价格表 控制器
*
* @author xxx
* @since 2021-03-11
*/
@Slf4j
@RestController
@RequestMapping
(
"/vipPrice"
)
@Api
(
value
=
"会员价格表API"
,
tags
=
{
"会员价格表"
})
public
class
VipPriceController
extends
BaseController
{
@Autowired
private
VipPriceService
vipPriceService
;
/**
* 会员价格表所有列表
*/
@PostMapping
(
"/getAllList"
)
@OperationLog
(
name
=
"会员价格表所有列表"
,
type
=
OperationLogType
.
PAGE
)
@ApiOperation
(
value
=
"会员价格表所有列表"
)
public
ApiResult
<
List
<
VipPrice
>>
getVipPricePageList
()
throws
Exception
{
return
ApiResult
.
ok
(
vipPriceService
.
list
());
}
// /**
// * 会员价格表分页列表
// */
// @PostMapping("/getPageList")
// @OperationLog(name = "会员价格表分页列表", type = OperationLogType.PAGE)
// @ApiOperation(value = "会员价格表分页列表")
// public ApiResult<Paging<VipPriceQueryVo>> getVipPricePageList(@Validated @RequestBody VipPricePageParam vipPricePageParam) throws Exception {
// Paging<VipPriceQueryVo> paging = vipPriceService.getVipPricePageList(vipPricePageParam);
// return ApiResult.ok(paging);
// }
// /**
// * 添加会员价格表
// */
// @PostMapping("/add")
// @OperationLog(name = "添加会员价格表", type = OperationLogType.ADD)
// @ApiOperation(value = "添加会员价格表")
// public ApiResult<Boolean> addVipPrice(@Validated(Add.class) @RequestBody VipPrice vipPrice) throws Exception {
// boolean flag = vipPriceService.saveVipPrice(vipPrice);
// return ApiResult.result(flag);
// }
//
// /**
// * 修改会员价格表
// */
// @PostMapping("/update")
// @OperationLog(name = "修改会员价格表", type = OperationLogType.UPDATE)
// @ApiOperation(value = "修改会员价格表")
// public ApiResult<Boolean> updateVipPrice(@Validated(Update.class) @RequestBody VipPrice vipPrice) throws Exception {
// boolean flag = vipPriceService.updateVipPrice(vipPrice);
// return ApiResult.result(flag);
// }
//
// /**
// * 删除会员价格表
// */
// @PostMapping("/delete/{id}")
// @OperationLog(name = "删除会员价格表", type = OperationLogType.DELETE)
// @ApiOperation(value = "删除会员价格表")
// public ApiResult<Boolean> deleteVipPrice(@PathVariable("id") Long id) throws Exception {
// boolean flag = vipPriceService.deleteVipPrice(id);
// return ApiResult.result(flag);
// }
//
// /**
// * 获取会员价格表详情
// */
// @GetMapping("/info/{id}")
// @OperationLog(name = "会员价格表详情", type = OperationLogType.INFO)
// @ApiOperation(value = "会员价格表详情")
// public ApiResult<VipPriceQueryVo> getVipPrice(@PathVariable("id") Long id) throws Exception {
// VipPriceQueryVo vipPriceQueryVo = vipPriceService.getVipPriceById(id);
// return ApiResult.ok(vipPriceQueryVo);
// }
}
common/src/main/java/com/sien/common/controller/VipRecordController.java
View file @
435053c1
package
com
.
sien
.
common
.
controller
;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.sien.common.param.VipRecordOpenParam
;
import
com.sien.common.service.VipRecordService
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
...
...
@@ -26,7 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping
(
"/vipRecord"
)
@Api
(
value
=
"Vip开通
记录API"
,
tags
=
{
"Vip开通记录
"
})
@Api
(
value
=
"Vip开通
API"
,
tags
=
{
"Vip开通
"
})
public
class
VipRecordController
extends
BaseController
{
@Autowired
...
...
@@ -37,11 +38,11 @@ public class VipRecordController extends BaseController {
* Vip开通
*/
@PostMapping
(
"/open"
)
@OperationLog
(
name
=
"
Vip开通
"
,
type
=
OperationLogType
.
ADD
)
@ApiOperation
(
value
=
"
Vip开通
"
)
public
ApiResult
<
Boolean
>
addVipRecord
(
@Validated
(
Add
.
class
)
@RequestBody
VipRecordOpenParam
vipRecordOpenParam
)
throws
Exception
{
boolean
flag
=
vipRecordService
.
openVip
(
vipRecordOpenParam
);
return
ApiResult
.
result
(
flag
);
@OperationLog
(
name
=
"
开通Vip
"
,
type
=
OperationLogType
.
ADD
)
@ApiOperation
(
value
=
"
开通Vip
"
)
public
ApiResult
<
WxPayMpOrderResult
>
openVip
(
@Validated
(
Add
.
class
)
@RequestBody
VipRecordOpenParam
vipRecordOpenParam
)
throws
Exception
{
return
vipRecordService
.
openVip
(
vipRecordOpenParam
);
}
// /**
...
...
common/src/main/java/com/sien/common/controller/WxPayController.java
View file @
435053c1
package
com
.
sien
.
common
.
controller
;
import
com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse
;
import
com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
import
com.github.binarywang.wxpay.service.WxPayService
;
import
com.sien.common.service.DonationRecordService
;
import
com.sien.common.service.VipRecordService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.AllArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -17,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
/**
* @author Binary Wang
*/
//
@Api(value = "微信支付", hidden = true)
@Api
(
value
=
"微信支付"
,
hidden
=
true
)
@RestController
@RequestMapping
(
"/pay"
)
@AllArgsConstructor
...
...
@@ -29,18 +29,19 @@ public class WxPayController {
@Autowired
private
DonationRecordService
donationRecordService
;
@ApiOperation
(
value
=
"捐款支付回调通知处理"
)
@Autowired
private
VipRecordService
vipRecordService
;
@ApiOperation
(
value
=
"捐款支付回调通知处理"
,
hidden
=
true
)
@PostMapping
(
"/notify/donationOrder"
)
public
String
parseDonationOrderNotifyResult
(
@RequestBody
String
xmlData
)
throws
WxPayException
{
return
donationRecordService
.
parseD
onationOrderNotifyResult
(
xmlData
);
return
donationRecordService
.
d
onationOrderNotifyResult
(
xmlData
);
}
@ApiOperation
(
value
=
"会员充值支付回调通知处理"
)
@ApiOperation
(
value
=
"会员充值支付回调通知处理"
,
hidden
=
true
)
@PostMapping
(
"/notify/vipOrder"
)
public
String
parseVipOrderNotifyResult
(
@RequestBody
String
xmlData
)
throws
WxPayException
{
final
WxPayOrderNotifyResult
notifyResult
=
this
.
wxService
.
parseOrderNotifyResult
(
xmlData
);
// TODO 根据自己业务场景需要构造返回对象
return
WxPayNotifyResponse
.
success
(
"成功"
);
return
vipRecordService
.
vipOrderNotifyResult
(
xmlData
);
}
//
// /**
...
...
common/src/main/java/com/sien/common/entity/VipPrice.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
io.geekidea.springbootplus.framework.common.entity.BaseEntity
;
import
io.geekidea.springbootplus.framework.core.validator.groups.Update
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* 会员价格表
*
* @author xxx
* @since 2021-03-11
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"VipPrice对象"
)
public
class
VipPrice
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
@NotNull
(
message
=
"id不能为空"
,
groups
=
{
Update
.
class
})
@ApiModelProperty
(
"id"
)
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
@ApiModelProperty
(
"会员价格"
)
private
BigDecimal
price
;
@ApiModelProperty
(
"会员类型(名称)"
)
private
String
memberShips
;
@ApiModelProperty
(
"创建时间"
)
private
Date
createTime
;
@ApiModelProperty
(
"修改时间"
)
private
Date
updateTime
;
@ApiModelProperty
(
"状态,0:禁用,1:启用"
)
private
Integer
state
;
}
common/src/main/java/com/sien/common/entity/VipRecord.java
View file @
435053c1
...
...
@@ -10,7 +10,6 @@ import lombok.Data;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
import
java.util.Date
;
...
...
@@ -51,9 +50,9 @@ public class VipRecord extends BaseEntity {
@ApiModelProperty
(
"开通多久"
)
private
Integer
years
;
@NotBlank
(
message
=
"会员等级不能为空"
)
@ApiModelProperty
(
"会员等级"
)
private
String
vipLevel
;
//
@NotBlank(message = "会员等级不能为空")
//
@ApiModelProperty("会员等级")
//
private String vipLevel;
@ApiModelProperty
(
"备注"
)
private
String
remark
;
...
...
common/src/main/java/com/sien/common/mapper/VipPriceMapper.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.sien.common.entity.VipPrice
;
import
com.sien.common.param.VipPricePageParam
;
import
com.sien.common.vo.app.VipPriceQueryVo
;
import
org.apache.ibatis.annotations.Param
;
import
org.springframework.stereotype.Repository
;
import
java.io.Serializable
;
/**
* 会员价格表 Mapper 接口
*
* @author xxx
* @since 2021-03-11
*/
@Repository
public
interface
VipPriceMapper
extends
BaseMapper
<
VipPrice
>
{
/**
* 根据ID获取查询对象
*
* @param id
* @return
*/
VipPriceQueryVo
getVipPriceById
(
Serializable
id
);
/**
* 获取分页对象
*
* @param page
* @param vipPricePageParam
* @return
*/
IPage
<
VipPriceQueryVo
>
getVipPricePageList
(
@Param
(
"page"
)
Page
page
,
@Param
(
"param"
)
VipPricePageParam
vipPricePageParam
);
}
common/src/main/java/com/sien/common/param/VipPricePageParam.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
param
;
import
io.geekidea.springbootplus.framework.core.pagination.BasePageOrderParam
;
import
io.swagger.annotations.ApiModel
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* <pre>
* 会员价格表 分页参数对象
* </pre>
*
* @author xxx
* @date 2021-03-11
*/
@Data
@Accessors
(
chain
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@ApiModel
(
value
=
"会员价格表分页参数"
)
public
class
VipPricePageParam
extends
BasePageOrderParam
{
private
static
final
long
serialVersionUID
=
1L
;
}
common/src/main/java/com/sien/common/param/VipRecordOpenParam.java
View file @
435053c1
...
...
@@ -9,7 +9,6 @@ import lombok.experimental.Accessors;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
import
java.math.BigDecimal
;
/**
* <pre>
...
...
@@ -26,16 +25,16 @@ import java.math.BigDecimal;
public
class
VipRecordOpenParam
extends
BasePageOrderParam
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"开通会员金额"
)
private
BigDecimal
money
;
//
@ApiModelProperty("开通会员金额")
//
private BigDecimal money;
@NotNull
(
message
=
"开通多久不能为空"
)
@ApiModelProperty
(
"开通多少年"
)
private
Integer
years
;
@NotBlank
(
message
=
"会员等级不能为空"
)
@ApiModelProperty
(
"会员等级
,直接传文字
"
)
private
String
vipLevel
;
@NotBlank
(
message
=
"会员等级
id
不能为空"
)
@ApiModelProperty
(
"会员等级
id,传入由会员列表接口返回的id
"
)
private
Long
vipLevelId
;
@NotBlank
(
message
=
"不能为空"
)
@ApiModelProperty
(
"是否代替他人开通"
)
...
...
common/src/main/java/com/sien/common/service/DonationRecordService.java
View file @
435053c1
...
...
@@ -40,7 +40,7 @@ public interface DonationRecordService extends BaseService<DonationRecord> {
/**
* 回调
*/
String
parseD
onationOrderNotifyResult
(
String
xmlData
);
String
d
onationOrderNotifyResult
(
String
xmlData
);
/**
...
...
common/src/main/java/com/sien/common/service/VipPriceService.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
service
;
import
com.sien.common.entity.VipPrice
;
import
com.sien.common.param.VipPricePageParam
;
import
com.sien.common.vo.app.VipPriceQueryVo
;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
/**
* 会员价格表 服务类
*
* @author xxx
* @since 2021-03-11
*/
public
interface
VipPriceService
extends
BaseService
<
VipPrice
>
{
/**
* 保存
*
* @param vipPrice
* @return
* @throws Exception
*/
boolean
saveVipPrice
(
VipPrice
vipPrice
)
throws
Exception
;
/**
* 修改
*
* @param vipPrice
* @return
* @throws Exception
*/
boolean
updateVipPrice
(
VipPrice
vipPrice
)
throws
Exception
;
/**
* 删除
*
* @param id
* @return
* @throws Exception
*/
boolean
deleteVipPrice
(
Long
id
)
throws
Exception
;
/**
* 根据ID获取查询对象
*
* @param id
* @return
* @throws Exception
*/
VipPriceQueryVo
getVipPriceById
(
Long
id
)
throws
Exception
;
/**
* 获取分页对象
*
* @param vipPricePageParam
* @return
* @throws Exception
*/
Paging
<
VipPriceQueryVo
>
getVipPricePageList
(
VipPricePageParam
vipPricePageParam
)
throws
Exception
;
}
common/src/main/java/com/sien/common/service/VipRecordService.java
View file @
435053c1
package
com
.
sien
.
common
.
service
;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.sien.common.entity.VipRecord
;
import
com.sien.common.param.VipRecordOpenParam
;
import
com.sien.common.param.VipRecordPageParam
;
import
com.sien.common.vo.VipRecordQueryVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.BaseService
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
...
...
@@ -16,6 +18,13 @@ import io.geekidea.springbootplus.framework.core.pagination.Paging;
public
interface
VipRecordService
extends
BaseService
<
VipRecord
>
{
/**
* 支付回调
* @param xmlData
* @return
*/
String
vipOrderNotifyResult
(
String
xmlData
);
/**
* 保存
*
* @param vipRecord
...
...
@@ -30,7 +39,7 @@ public interface VipRecordService extends BaseService<VipRecord> {
* @return
* @throws Exception
*/
boolean
openVip
(
VipRecordOpenParam
vipRecordOpenParam
)
throws
Exception
;
ApiResult
<
WxPayMpOrderResult
>
openVip
(
VipRecordOpenParam
vipRecordOpenParam
)
throws
Exception
;
/**
* 修改
...
...
common/src/main/java/com/sien/common/service/impl/DonationRecordServiceImpl.java
View file @
435053c1
...
...
@@ -81,7 +81,7 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
}
@Override
public
String
parseD
onationOrderNotifyResult
(
String
xmlData
)
{
public
String
d
onationOrderNotifyResult
(
String
xmlData
)
{
WxPayOrderNotifyResult
notifyResult
;
try
{
...
...
@@ -125,8 +125,6 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
return
ApiResult
.
fail
(
ApiCode
.
FAIL
,
new
WxPayMpOrderResult
());
}
// 微信支付请求参数对象
WxPayUnifiedOrderRequest
wxPayUnifiedOrderRequest
=
new
WxPayUnifiedOrderRequest
();
String
openid
=
appUserById
.
getWechatOpenId
();
String
spbillCreateIp
=
httpServletRequest
.
getRemoteAddr
();
...
...
@@ -152,6 +150,7 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
}
// 设置捐款记录表
donationRecord
.
setMoney
(
donationRecordAdd
.
getMoney
());
donationRecord
.
setPurpose
(
donationRecordAdd
.
getPurpose
());
donationRecord
.
setWay
(
donationRecordAdd
.
getWay
());
...
...
@@ -174,7 +173,7 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
// 调用微信支付api
WxPayMpOrderResult
order
=
null
;
try
{
order
=
getWxPayMpOrderResult
(
wxPayUnifiedOrderRequest
,
outTradeNo
,
openid
,
spbillCreateIp
,
totalFee
);
order
=
getWxPayMpOrderResult
(
outTradeNo
,
openid
,
spbillCreateIp
,
totalFee
);
}
catch
(
WxPayException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -182,7 +181,9 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
return
ApiResult
.
ok
(
order
);
}
private
WxPayMpOrderResult
getWxPayMpOrderResult
(
WxPayUnifiedOrderRequest
wxPayUnifiedOrderRequest
,
String
outTradeNo
,
String
openid
,
String
spbillCreateIp
,
int
totalFee
)
throws
WxPayException
{
private
WxPayMpOrderResult
getWxPayMpOrderResult
(
String
outTradeNo
,
String
openid
,
String
spbillCreateIp
,
int
totalFee
)
throws
WxPayException
{
WxPayUnifiedOrderRequest
wxPayUnifiedOrderRequest
=
new
WxPayUnifiedOrderRequest
();
wxPayUnifiedOrderRequest
.
setBody
(
DonationRecordServiceImpl
.
BODY
);
// 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
...
...
common/src/main/java/com/sien/common/service/impl/VipPriceServiceImpl.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.sien.common.entity.VipPrice
;
import
com.sien.common.mapper.VipPriceMapper
;
import
com.sien.common.param.VipPricePageParam
;
import
com.sien.common.service.VipPriceService
;
import
com.sien.common.vo.app.VipPriceQueryVo
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
/**
* 会员价格表 服务实现类
*
* @author xxx
* @since 2021-03-11
*/
@Slf4j
@Service
public
class
VipPriceServiceImpl
extends
BaseServiceImpl
<
VipPriceMapper
,
VipPrice
>
implements
VipPriceService
{
@Autowired
private
VipPriceMapper
vipPriceMapper
;
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
saveVipPrice
(
VipPrice
vipPrice
)
throws
Exception
{
return
super
.
save
(
vipPrice
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
updateVipPrice
(
VipPrice
vipPrice
)
throws
Exception
{
return
super
.
updateById
(
vipPrice
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
deleteVipPrice
(
Long
id
)
throws
Exception
{
return
super
.
removeById
(
id
);
}
@Override
public
VipPriceQueryVo
getVipPriceById
(
Long
id
)
throws
Exception
{
return
vipPriceMapper
.
getVipPriceById
(
id
);
}
@Override
public
Paging
<
VipPriceQueryVo
>
getVipPricePageList
(
VipPricePageParam
vipPricePageParam
)
throws
Exception
{
Page
<
VipPriceQueryVo
>
page
=
new
PageInfo
<>(
vipPricePageParam
,
OrderItem
.
desc
(
getLambdaColumn
(
VipPrice:
:
getCreateTime
)));
IPage
<
VipPriceQueryVo
>
iPage
=
vipPriceMapper
.
getVipPricePageList
(
page
,
vipPricePageParam
);
return
new
Paging
<
VipPriceQueryVo
>(
iPage
);
}
}
common/src/main/java/com/sien/common/service/impl/VipRecordServiceImpl.java
View file @
435053c1
package
com
.
sien
.
common
.
service
.
impl
;
import
cn.hutool.captcha.generator.RandomGenerator
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.OrderItem
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse
;
import
com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult
;
import
com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult
;
import
com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest
;
import
com.github.binarywang.wxpay.exception.WxPayException
;
import
com.github.binarywang.wxpay.service.WxPayService
;
import
com.sien.common.entity.AppUser
;
import
com.sien.common.entity.VipRecord
;
import
com.sien.common.mapper.VipRecordMapper
;
import
com.sien.common.param.VipRecordOpenParam
;
import
com.sien.common.param.VipRecordPageParam
;
import
com.sien.common.service.AppUserService
;
import
com.sien.common.service.VipPriceService
;
import
com.sien.common.service.VipRecordService
;
import
com.sien.common.vo.AppUserQueryVo
;
import
com.sien.common.vo.VipRecordQueryVo
;
import
com.sien.common.vo.app.VipPriceQueryVo
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl
;
import
io.geekidea.springbootplus.framework.core.pagination.PageInfo
;
import
io.geekidea.springbootplus.framework.core.pagination.Paging
;
...
...
@@ -19,7 +34,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
java.math.BigDecimal
;
import
java.util.Calendar
;
import
java.util.Date
;
/**
* Vip开通记录 服务实现类
...
...
@@ -31,40 +50,151 @@ import java.util.Calendar;
@Service
public
class
VipRecordServiceImpl
extends
BaseServiceImpl
<
VipRecordMapper
,
VipRecord
>
implements
VipRecordService
{
private
static
final
String
BODY
=
"厦门市四恩慈善会会员开通"
;
private
static
final
String
NOTIFY_URL
=
"https://c7a30ed052d8.ngrok.io/api/pay/notify/vipOrder"
;
@Autowired
private
VipRecordMapper
vipRecordMapper
;
@Autowired
private
WxPayService
wxService
;
@Autowired
private
AppUserService
appUserService
;
@Resource
HttpServletRequest
httpServletRequest
;
@Autowired
private
VipPriceService
vipPriceService
;
@Override
public
String
vipOrderNotifyResult
(
String
xmlData
)
{
WxPayOrderNotifyResult
notifyResult
;
try
{
notifyResult
=
this
.
wxService
.
parseOrderNotifyResult
(
xmlData
);
}
catch
(
WxPayException
e
)
{
// 是否能解密成功
e
.
printStackTrace
();
return
WxPayNotifyResponse
.
fail
(
"错误"
);
}
VipRecord
vipRecord
=
super
.
getOne
(
new
QueryWrapper
<
VipRecord
>().
lambda
().
eq
(
VipRecord:
:
getWxMerPayId
,
notifyResult
.
getOutTradeNo
()));
// 如果已经支付 直接响应成功
if
(
vipRecord
.
getPayStatus
()
==
1
)
{
return
WxPayNotifyResponse
.
successResp
(
"成功"
);
}
vipRecord
.
setPayStatus
(
1
);
vipRecord
.
setPayTime
(
new
Date
());
super
.
updateById
(
vipRecord
);
return
WxPayNotifyResponse
.
successResp
(
"成功"
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
public
boolean
saveVipRecord
(
VipRecord
vipRecord
)
throws
Exception
{
return
super
.
save
(
vipRecord
);
}
private
WxPayMpOrderResult
getWxPayMpOrderResult
(
String
outTradeNo
,
String
openid
,
String
spbillCreateIp
,
int
totalFee
)
throws
WxPayException
{
WxPayUnifiedOrderRequest
wxPayUnifiedOrderRequest
=
new
WxPayUnifiedOrderRequest
();
wxPayUnifiedOrderRequest
.
setBody
(
VipRecordServiceImpl
.
BODY
);
// 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
wxPayUnifiedOrderRequest
.
setOutTradeNo
(
outTradeNo
);
//订单总金额,单位为分,详见支付金额
wxPayUnifiedOrderRequest
.
setTotalFee
(
totalFee
);
// APP和网页支付提交用户端ip
wxPayUnifiedOrderRequest
.
setSpbillCreateIp
(
spbillCreateIp
);
// 接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
wxPayUnifiedOrderRequest
.
setNotifyUrl
(
VipRecordServiceImpl
.
NOTIFY_URL
);
wxPayUnifiedOrderRequest
.
setOpenid
(
openid
);
String
jsapi
=
"JSAPI"
;
wxPayUnifiedOrderRequest
.
setTradeType
(
jsapi
);
WxPayMpOrderResult
order
=
null
;
// try {
order
=
this
.
wxService
.
createOrder
(
wxPayUnifiedOrderRequest
);
// } catch (WxPayException e) {
// e.printStackTrace();
// }
return
order
;
}
@Override
public
boolean
openVip
(
VipRecordOpenParam
vipRecordOpenParam
)
throws
Exception
{
public
ApiResult
<
WxPayMpOrderResult
>
openVip
(
VipRecordOpenParam
vipRecordOpenParam
)
throws
Exception
{
JwtToken
jwtToken
=
(
JwtToken
)
SecurityUtils
.
getSubject
().
getPrincipal
();
VipRecord
vipRecord
=
new
VipRecord
();
vipRecord
.
setFkUserId
(
jwtToken
.
getUserId
());
vipRecord
.
setMoney
(
vipRecordOpenParam
.
getMoney
());
vipRecord
.
setFkRechargeUser
(-
1L
);
AppUserQueryVo
appUserById
=
appUserService
.
getAppUserById
(
jwtToken
.
getUserId
());
// 获取vip价格表
VipPriceQueryVo
vipPriceById
=
vipPriceService
.
getVipPriceById
(
vipRecordOpenParam
.
getVipLevelId
());
if
(
vipPriceById
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
FAIL
,
null
);
}
// 应付金额
BigDecimal
money
=
vipPriceById
.
getPrice
().
multiply
(
new
BigDecimal
(
vipRecordOpenParam
.
getYears
()));
// 设置到期时间
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
add
(
Calendar
.
YEAR
,
vipRecordOpenParam
.
getYears
());
vipRecord
.
setExpiredAt
(
calendar
.
getTime
());
Date
expiredAt
=
calendar
.
getTime
();
// 商家订单号
String
outTradeNo
=
new
RandomGenerator
(
32
).
generate
();
VipRecord
vipRecord
=
new
VipRecord
();
vipRecord
.
setMoney
(
money
);
vipRecord
.
setExpiredAt
(
expiredAt
);
vipRecord
.
setYears
(
vipRecordOpenParam
.
getYears
());
vipRecord
.
setVipLevel
(
vipRecordOpenParam
.
getVipLevel
());
// vipRecord.setRemark("");
// vipRecord.setCreateTime(new Date());
// vipRecord.setUpdateTime(new Date());
vipRecord
.
setPayStatus
(
0
);
// 判断是否为替他人
//
// 判断是否为替他人
if
(
vipRecordOpenParam
.
getIsReplace
())
{
// vipRecord.setFkRechargeUser(vipRecordOpenParam.getAgentUserId());
AppUser
user
=
appUserService
.
getOne
(
new
QueryWrapper
<
AppUser
>().
lambda
()
.
eq
(
AppUser:
:
getPhone
,
vipRecordOpenParam
.
getUserPhone
())
.
eq
(
AppUser:
:
getPhoneArea
,
vipRecordOpenParam
.
getPhoneArea
()));
//判断接收方是否存在
if
(
user
==
null
)
{
return
ApiResult
.
fail
(
ApiCode
.
FAIL
,
new
WxPayMpOrderResult
());
}
vipRecord
.
setFkUserId
(
user
.
getId
());
vipRecord
.
setFkRechargeUser
(
jwtToken
.
getUserId
());
}
else
{
vipRecord
.
setFkUserId
(
jwtToken
.
getUserId
());
vipRecord
.
setFkRechargeUser
(-
1L
);
}
// 保存数据库
boolean
save
=
super
.
save
(
vipRecord
);
if
(
save
)
{
// 保存成功调用微信支付
String
ip
=
httpServletRequest
.
getRemoteAddr
();
BigDecimal
num2
=
new
BigDecimal
(
100
);
int
totalFee
=
money
.
multiply
(
num2
).
intValue
();
WxPayMpOrderResult
wxPayMpOrderResult
=
getWxPayMpOrderResult
(
outTradeNo
,
appUserById
.
getWechatOpenId
(),
ip
,
totalFee
);
return
ApiResult
.
ok
(
wxPayMpOrderResult
);
}
else
{
return
ApiResult
.
fail
(
ApiCode
.
FAIL
,
null
);
}
return
super
.
save
(
vipRecord
);
}
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
common/src/main/java/com/sien/common/vo/app/VipPriceQueryVo.java
0 → 100644
View file @
435053c1
package
com
.
sien
.
common
.
vo
.
app
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
import
java.math.BigDecimal
;
import
java.util.Date
;
/**
* <pre>
* 会员价格表 查询结果对象
* </pre>
*
* @author xxx
* @date 2021-03-11
*/
@Data
@Accessors
(
chain
=
true
)
@ApiModel
(
value
=
"VipPriceQueryVo对象"
)
public
class
VipPriceQueryVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
"id"
)
private
Long
id
;
@ApiModelProperty
(
"会员价格"
)
private
BigDecimal
price
;
@ApiModelProperty
(
"会员类型(名称)"
)
private
String
memberShips
;
@ApiModelProperty
(
"创建时间"
)
private
Date
createTime
;
@ApiModelProperty
(
"修改时间"
)
private
Date
updateTime
;
@ApiModelProperty
(
"状态,0:禁用,1:启用"
)
private
Integer
state
;
}
\ No newline at end of file
common/src/main/resources/mapper/VipPriceMapper.xml
0 → 100644
View file @
435053c1
<?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.sien.common.mapper.VipPriceMapper"
>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
id
, price, member_ships, create_time, update_time, state
</sql>
<select
id=
"getVipPriceById"
resultType=
"com.sien.common.vo.app.VipPriceQueryVo"
>
select
<include
refid=
"Base_Column_List"
/>
from vip_price where id = #{id}
</select>
<select
id=
"getVipPricePageList"
parameterType=
"com.sien.common.param.VipPricePageParam"
resultType=
"com.sien.common.vo.app.VipPriceQueryVo"
>
select
<include
refid=
"Base_Column_List"
/>
from vip_price
</select>
</mapper>
common/src/main/resources/mapper/VipRecordMapper.xml
View file @
435053c1
...
...
@@ -4,7 +4,7 @@
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
id, fk_user_id, fk_recharge_user, money, expired_at, years,
vip_level,
remark, create_time, update_time,wx_mer_pay_id,pay_status,pay_time
id, fk_user_id, fk_recharge_user, money, expired_at, years, remark, create_time, update_time,wx_mer_pay_id,pay_status,pay_time
</sql>
<select
id=
"getVipRecordById"
resultType=
"com.sien.common.vo.VipRecordQueryVo"
>
...
...
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