MemberOperationController.java 4.39 KB
package com.topdraw.business.process.rest;

import cn.hutool.core.util.ObjectUtil;
import com.topdraw.annotation.AnonymousAccess;
import com.topdraw.business.module.member.profile.service.dto.MemberProfileDTO;
import com.topdraw.business.module.member.service.MemberService;
import com.topdraw.business.module.member.service.dto.MemberDTO;
import com.topdraw.business.module.member.viphistory.domain.MemberVipHistory;
import com.topdraw.business.module.member.viphistory.service.MemberVipHistoryService;
import com.topdraw.business.module.user.weixin.service.UserWeixinService;
import com.topdraw.business.module.user.weixin.service.dto.UserWeixinDTO;
import com.topdraw.business.module.user.weixin.service.dto.UserWeixinQueryCriteria;
import com.topdraw.business.process.domian.weixin.BuyVipBean;
import com.topdraw.business.process.domian.weixin.WeiXinUserBean;
import com.topdraw.business.process.service.MemberOperationService;
import com.topdraw.common.IResultInfo;
import com.topdraw.common.ResultInfo;
import com.topdraw.exception.BadRequestException;
import com.topdraw.weixin.util.WeChatConstants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.Objects;

@Api("会员处理")
@RestController
@RequestMapping(value = "/ucEngine/api/memberOperation")
public class MemberOperationController {

    @Autowired
    private MemberOperationService memberOperationService;
    @Autowired
    private MemberVipHistoryService memberVipHistoryService;
    @Autowired
    private UserWeixinService userWeixinService;
    @Autowired
    private MemberService memberService;

    @GetMapping("/getMemberProfileAndCheckVip/{appId}/{memberId}")
    @ApiOperation("获取会员基本信息并且检查vip状态")
    @AnonymousAccess
    public IResultInfo getMemberProfileAndCheckVip(@PathVariable(value = "appId") String appId, @PathVariable(value = "memberId") Long memberId) {
        MemberProfileDTO memberProfileDTO = this.memberOperationService.getMemberProfileAndCheckVip(memberId, appId);
        return ResultInfo.success(memberProfileDTO);
    }

    @PutMapping("/buyVip")
    @ApiOperation("购买vip")
    @AnonymousAccess
    public ResultInfo buyVip(@RequestBody BuyVipBean buyVipBean) {

        // 小程序账户id
        Long id = buyVipBean.getId();
        if (Objects.isNull(id))
            throw new BadRequestException("参数异常: id is null !");

        // vip等级
        Integer vip = buyVipBean.getVip();
        if (Objects.isNull(vip) || vip <= 0)
            throw new BadRequestException("vip 等级有误");

        MemberDTO memberDTO = memberOperationService.buyVip(buyVipBean);

        LocalDateTime vipExpireTime = buyVipBean.getVipExpireTime();
        this.doInsertVipHistory(id,vip,vipExpireTime);
        return ResultInfo.success(memberDTO);
    }

    private void doInsertVipHistory(Long id,Integer vip,LocalDateTime vipExpireTime) {

        UserWeixinDTO userWeixinDTO = this.userWeixinService.findById(id);
        Long memberId = userWeixinDTO.getMemberId();

        MemberDTO member = this.memberService.findById(memberId);

        LocalDateTime now = LocalDateTime.now();

        MemberVipHistory memberVipHistory = new MemberVipHistory();
        if (ObjectUtil.isNull(vipExpireTime)) {
            LocalDateTime localDateTime = now.plusYears(1L);
            member.setVipExpireTime(localDateTime);
        } else {
            //购买过  判断当前时间有没有过vip过期时间,没有过,失效时间加一年;    过了,当前时间加一年
            //区分是当前vip续费  还是买新的vip
            if (ObjectUtil.equal(vip, member.getVip())) {
                if (now.isBefore(vipExpireTime)) {
                    LocalDateTime localDateTime = vipExpireTime.plusYears(1L);
                    member.setVipExpireTime(localDateTime);
                } else {
                    LocalDateTime localDateTime = now.plusYears(1L);
                    member.setVipExpireTime(localDateTime);
                }
            } else {
                LocalDateTime localDateTime = now.plusYears(1L);
                member.setVipExpireTime(localDateTime);
            }
        }

        memberVipHistory.setVipExpireTime(member.getVipExpireTime());
        memberVipHistoryService.create(memberVipHistory);
    }
}