Commit 435053c1 by giaogiao

vip开通

parent 45b6b497
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);
// }
}
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);
}
// /**
......
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.parseDonationOrderNotifyResult(xmlData);
return donationRecordService.donationOrderNotifyResult(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);
}
//
// /**
......
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;
}
......@@ -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;
......
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);
}
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;
}
......@@ -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("是否代替他人开通")
......
......@@ -40,7 +40,7 @@ public interface DonationRecordService extends BaseService<DonationRecord> {
/**
* 回调
*/
String parseDonationOrderNotifyResult(String xmlData);
String donationOrderNotifyResult(String xmlData);
/**
......
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;
}
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;
/**
* 修改
......
......@@ -81,7 +81,7 @@ public class DonationRecordServiceImpl extends BaseServiceImpl<DonationRecordMap
}
@Override
public String parseDonationOrderNotifyResult(String xmlData) {
public String donationOrderNotifyResult(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个字符内、可包含字母, 其他说明见商户订单号
......
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);
}
}
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)
......
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
<?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>
......@@ -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">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment