Commit ec0f209c authored by liuyang's avatar liuyang

添加用户授权课程表、企业VIP或课程余额表、企业成员领用或分配记录表

parent 1fa4a43b
......@@ -4,7 +4,20 @@ package com.qkdata.biz.enums;
* 订单类型
*/
public enum ProductTypeEnum {
/**
* 个人购买VIP
*/
USER_VIP,
/**
* 企业购买VIP
*/
ENTERPRISE_VIP,
COURSE_BUY;
/**
* 个人购买课程
*/
COURSE_BUY,
/**
* 企业购买课程
*/
ENTERPRISE_COURSE_BUY;
}
package com.qkdata.biz.enums;
/**
* 企业VIP领用开放、关闭
*/
public enum VipReceiveEnum {
OPEN,
CLOSE;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 企业VIP或课程余额表
* </p>
*
* @author liuyang
* @since 2021-06-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("org_surplus")
public class OrgSurplusPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 企业ID
*/
private Long orgId;
/**
* 课程ID
*/
private Long courseId;
/**
* 产品类型
*/
private String productType;
/**
* 剩余数量
*/
private Integer count;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.biz.enums.UserPayRecordTypeEnum;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 企业会员领取记录
* 企业成员领用或分配记录表
* </p>
*
* @author liuyang
* @since 2021-05-28
* @since 2021-06-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("user_get_vip_record")
public class UserGetVipRecordPO extends BasePO {
@TableName("org_user_receive_record")
public class OrgUserReceiveRecordPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 企业ID
*/
private Long orgId;
/**
* 用户ID
*/
private Long userId;
/**
* 领取类型(月卡、付费点播课程)
* 产品类型
*/
private UserPayRecordTypeEnum type;
private String productType;
/**
* 课程ID
* 领用或分配的数量
*/
private Long courseId;
private Integer count;
/**
* 企业ID
* 课程ID
*/
private Long orgId;
private Long courseId;
}
......@@ -3,6 +3,7 @@ package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.biz.enums.OrgTypeEnum;
import com.qkdata.biz.enums.VipReceiveEnum;
import com.qkdata.common.base.entity.BasePO;
import lombok.Data;
import lombok.EqualsAndHashCode;
......@@ -72,6 +73,14 @@ public class OrganizationPO extends BasePO {
*/
@TableLogic
private Boolean isDel;
/**
* 企业会员领用开放关闭标识
*/
private VipReceiveEnum vipReceive;
/**
* 企业点播库开放关闭标识
*/
private VipReceiveEnum courseReceive;
}
package com.qkdata.biz.management.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qkdata.common.base.entity.BasePO;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 用户课程授权表
* </p>
*
* @author liuyang
* @since 2021-06-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("user_course_auth")
public class UserCourseAuthPO extends BasePO {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 课程ID
*/
private Long courseId;
/**
* 开始时间
*/
private LocalDateTime startTime;
/**
* 结束时间
*/
private LocalDateTime endTime;
/**
* 购买或领用
*/
private String type;
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.UserGetVipRecordPO;
import com.qkdata.biz.management.entity.OrgSurplusPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 企业会员领取记录 Mapper 接口
* 企业VIP或课程余额表 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-05-28
* @since 2021-06-03
*/
@Mapper
public interface UserGetVipRecordMapper extends BaseMapper<UserGetVipRecordPO> {
public interface OrgSurplusMapper extends BaseMapper<OrgSurplusPO> {
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.OrgUserReceiveRecordPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 企业成员领用或分配记录表 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-06-03
*/
@Mapper
public interface OrgUserReceiveRecordMapper extends BaseMapper<OrgUserReceiveRecordPO> {
}
package com.qkdata.biz.management.mapper;
import com.qkdata.biz.management.entity.UserCourseAuthPO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* 用户课程授权表 Mapper 接口
* </p>
*
* @author liuyang
* @since 2021-06-03
*/
@Mapper
public interface UserCourseAuthMapper extends BaseMapper<UserCourseAuthPO> {
}
package com.qkdata.biz.management.service;
import com.qkdata.biz.management.entity.UserGetVipRecordPO;
import com.qkdata.biz.management.mapper.UserGetVipRecordMapper;
import com.qkdata.biz.management.entity.OrgSurplusPO;
import com.qkdata.biz.management.mapper.OrgSurplusMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* $!{table.comment} 服务类
* 企业VIP或课程余额 服务类
* </p>
*
* @author liuyang
* @since 2021-05-28
* @since 2021-06-03
*/
@Service
public class UserGetVipRecordService extends ServiceImpl<UserGetVipRecordMapper, UserGetVipRecordPO> {
public class OrgSurplusService extends ServiceImpl<OrgSurplusMapper, OrgSurplusPO> {
}
\ No newline at end of file
package com.qkdata.biz.management.service;
import com.qkdata.biz.management.entity.OrgUserReceiveRecordPO;
import com.qkdata.biz.management.mapper.OrgUserReceiveRecordMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 企业成员领用或分配记录 服务类
* </p>
*
* @author liuyang
* @since 2021-06-03
*/
@Service
public class OrgUserReceiveRecordService extends ServiceImpl<OrgUserReceiveRecordMapper, OrgUserReceiveRecordPO> {
}
\ No newline at end of file
......@@ -42,6 +42,7 @@ import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
......@@ -225,4 +226,24 @@ public class ProductOrderService extends ServiceImpl<ProductOrderMapper, Product
}
return PageResult.<ProductOrderModel>builder().code(CodeEnum.SUCCESS.getCode()).count(page.getTotal()).data(list).build();
}
public void orderComplete(String orderNo) {
updateStatus(orderNo,ProductOrderStatusEnum.PAY_COMPLETE);
ProductOrderPO orderPO = getByOrderNo(orderNo);
if (orderPO.getProductType() == ProductTypeEnum.USER_VIP){
//TODO 更新用户VIP时间,用户从普通用户变为会员
LocalDateTime payCompleteTime = orderPO.getUpdateTime();//支付完成时间
int count = orderPO.getProductCount();//购买的几个月VIP
Long userId = orderPO.getUserId();
}else if (orderPO.getProductType() == ProductTypeEnum.ENTERPRISE_VIP){
//TODO 添加企业VIP购买记录
}else if (orderPO.getProductType() == ProductTypeEnum.COURSE_BUY){
//TODO 添加课程购买记录
}else if (orderPO.getProductType() == ProductTypeEnum.ENTERPRISE_COURSE_BUY){
//TODO 添加企业课程购买记录
}
}
}
\ No newline at end of file
package com.qkdata.biz.management.service;
import com.qkdata.biz.management.entity.UserCourseAuthPO;
import com.qkdata.biz.management.mapper.UserCourseAuthMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户课程授权 服务类
* </p>
*
* @author liuyang
* @since 2021-06-03
*/
@Service
public class UserCourseAuthService extends ServiceImpl<UserCourseAuthMapper, UserCourseAuthPO> {
}
\ No newline at end of file
package com.qkdata.biz.web.service;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qkdata.biz.enums.CourseAllowEnum;
import com.qkdata.biz.enums.CourseChargeModelEnum;
import com.qkdata.biz.enums.CourseStatusEnum;
import com.qkdata.biz.enums.UserPayRecordTypeEnum;
import com.qkdata.biz.management.entity.CoursePO;
import com.qkdata.biz.management.entity.UserFavoritesPO;
import com.qkdata.biz.management.entity.UserGetVipRecordPO;
import com.qkdata.biz.management.mapper.UserFavoritesMapper;
import com.qkdata.biz.management.service.CourseService;
import com.qkdata.biz.management.service.UserFavoritesService;
import com.qkdata.biz.management.service.UserGetVipRecordService;
import com.qkdata.biz.management.vo.QueryFavoriteCourseModel;
import com.qkdata.biz.sys.service.SysUserService;
import com.qkdata.biz.web.vo.FullUserInfo;
import com.qkdata.biz.web.vo.SearchCourseResultModel;
import com.qkdata.common.base.entity.BasePO;
import com.qkdata.common.base.exception.BusinessException;
import com.qkdata.common.base.model.PageResult;
import com.qkdata.common.util.UserContext;
......@@ -35,8 +29,6 @@ public class UserCenterService {
@Autowired
private CourseService courseService;
@Autowired
private UserGetVipRecordService userGetVipRecordService;
@Autowired
private UserFavoritesService userFavoritesService;
/**
......@@ -83,22 +75,22 @@ public class UserCenterService {
throw new BusinessException("您的会员已过期,请续费后再观看");
}
}else if (course.getChargeModel() == CourseChargeModelEnum.PAY){
UserGetVipRecordPO userGetVipRecordPO = userGetVipRecordService.getOne(Wrappers.<UserGetVipRecordPO>lambdaQuery()
.eq(UserGetVipRecordPO::getUserId,userId)
.eq(UserGetVipRecordPO::getCourseId,courseId)
.eq(UserGetVipRecordPO::getType,UserPayRecordTypeEnum.SINGLE_COURSE)
.orderByDesc(BasePO::getCreateTime)
.last("limit 1"));
if (userGetVipRecordPO == null){
throw new BusinessException("当前课程为付费课程,请购买后再观看");
}
Integer validPeriod = course.getValidPeriod();
LocalDateTime startTime = userGetVipRecordPO.getCreateTime();
LocalDateTime endTime = startTime.plusHours(validPeriod);
LocalDateTime now = LocalDateTime.now();
if (!(now.isAfter(startTime) && now.isBefore(endTime))){
throw new BusinessException("您购买的该课程已过期,请重新购买");
}
// UserGetVipRecordPO userGetVipRecordPO = userGetVipRecordService.getOne(Wrappers.<UserGetVipRecordPO>lambdaQuery()
// .eq(UserGetVipRecordPO::getUserId,userId)
// .eq(UserGetVipRecordPO::getCourseId,courseId)
// .eq(UserGetVipRecordPO::getType,UserPayRecordTypeEnum.SINGLE_COURSE)
// .orderByDesc(BasePO::getCreateTime)
// .last("limit 1"));
// if (userGetVipRecordPO == null){
// throw new BusinessException("当前课程为付费课程,请购买后再观看");
// }
// Integer validPeriod = course.getValidPeriod();
// LocalDateTime startTime = userGetVipRecordPO.getCreateTime();
// LocalDateTime endTime = startTime.plusHours(validPeriod);
// LocalDateTime now = LocalDateTime.now();
// if (!(now.isAfter(startTime) && now.isBefore(endTime))){
// throw new BusinessException("您购买的该课程已过期,请重新购买");
// }
}
......
......@@ -9,6 +9,7 @@ import com.github.binarywang.wxpay.service.WxPayService;
import com.qkdata.biz.enums.ProductOrderStatusEnum;
import com.qkdata.biz.management.service.ProductOrderService;
import io.swagger.annotations.ApiOperation;
import jdk.nashorn.internal.objects.NativeJava;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -31,17 +32,20 @@ public class WxPayNotifyController {
@ApiOperation(value = "支付回调通知处理")
@PostMapping("/notify/order")
public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException {
String outTradeNo = null;
try {
final WxPayOrderNotifyResult notifyResult = this.wxPayService.parseOrderNotifyResult(xmlData);
log.info(notifyResult.toString());
notifyResult.checkResult(wxPayService,notifyResult.getSignType(),true);
String outTradeNo = notifyResult.getOutTradeNo();
orderService.updateStatus(outTradeNo, ProductOrderStatusEnum.PAY_COMPLETE);
outTradeNo = notifyResult.getOutTradeNo();
orderService.orderComplete(outTradeNo);
}catch (WxPayException e){
log.error(e.getMessage(),e);
if (null != outTradeNo){
orderService.updateStatus(outTradeNo,ProductOrderStatusEnum.PAY_FAILD);
}
}
return WxPayNotifyResponse.success("OK");
}
......
DROP TABLE IF EXISTS org_buy_course_record;
DROP TABLE IF EXISTS org_buy_vip_record;
DROP TABLE IF EXISTS user_get_vip_record;
ALTER TABLE `organization`
ADD COLUMN `vip_receive` varchar(10) NULL COMMENT '企业会员领取开放、关闭标识' AFTER `is_del`,
ADD COLUMN `course_receive` varchar(10) NULL COMMENT '企业会员点播库领取开放、关闭标识' AFTER `vip_receive`;
CREATE TABLE `user_course_auth` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NULL COMMENT '用户ID',
`course_id` bigint(20) NULL COMMENT '课程ID',
`start_time` datetime(0) NULL COMMENT '开始时间',
`end_time` datetime(0) NULL COMMENT '结束时间',
`type` varchar(10) NULL COMMENT '购买或领用',
PRIMARY KEY (`id`)
) COMMENT = '用户课程授权表';
CREATE TABLE `org_surplus` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`org_id` bigint(20) NULL COMMENT '企业ID',
`course_id` bigint(20) NULL COMMENT '课程ID',
`product_type` varchar(20) NULL COMMENT '产品类型',
`count` int(11) NULL COMMENT '剩余数量',
PRIMARY KEY (`id`)
) COMMENT = '企业VIP或课程余额表';
CREATE TABLE `org_user_receive_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`org_id` bigint(20) NULL COMMENT '企业ID',
`user_id` bigint(20) NULL COMMENT '用户ID',
`product_type` varchar(20) NULL COMMENT '产品类型',
`count` int(11) NULL COMMENT '领用或分配的数量',
`course_id` bigint(11) NULL COMMENT '课程ID',
`create_time` datetime(0) NULL,
`update_time` datetime(0) NULL,
PRIMARY KEY (`id`)
) COMMENT = '企业成员领用或分配记录表';
\ 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.qkdata.biz.management.mapper.UserGetVipRecordMapper">
<mapper namespace="com.qkdata.biz.management.mapper.OrgSurplusMapper">
</mapper>
<?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.qkdata.biz.management.mapper.OrgUserReceiveRecordMapper">
</mapper>
<?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.qkdata.biz.management.mapper.UserCourseAuthMapper">
</mapper>
......@@ -13,6 +13,7 @@
inner join user_favorites f on c.id = f.course_id
WHERE
c.is_del = 0
and c.allow='ALL'
and c.status = 'UP'
</select>
</mapper>
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