rk
2026-03-17 a9e1505680c7dd45840975b38451ef88d451e6d4
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -55,6 +55,7 @@
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.shiro.SecurityUtils;
import org.checkerframework.checker.units.qual.N;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@@ -84,6 +85,8 @@
    @Autowired
    private CouponMapper couponMapper;
    @Autowired
    private MemberCouponMapper memberCouponMapper;
    @Autowired
    private MemberCouponJoinMapper memberCouponJoinMapper;
    @Autowired
    private IntegralMapper integralMapper;
@@ -91,6 +94,8 @@
    private ShopMapper shopMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private NoticeMapper noticeMapper;
    @Autowired
@@ -307,34 +312,33 @@
    @Override
    public AccountResponse wxLogin(String code){
        try {
            //获取微信敏感数据
            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
            String openId = session.getOpenid();
            if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员");
            }
            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getOpenId, openId)
                            .eq(Member::getIsdeleted,Constants.ZERO).eq(Member::getStatus,Constants.ZERO)
                    .last(" limit 1"));
            AccountResponse accountResponse = new AccountResponse();
            if(Objects.nonNull(member)){
                memberMapper.updateById(member);
                member.setImgFullUrl(StringUtils.isNotBlank(member.getImgurl())?systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+
                        systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode()+member.getImgurl():null);
                String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
                accountResponse.setToken(token);
                accountResponse.setOpenid(openId);
                accountResponse.setMember(member);
            }else{
                accountResponse.setOpenid(openId);
            }
            return accountResponse;
        } catch (WxErrorException e) {
            e.printStackTrace();
    public AccountResponse wxLogin(String code) throws WxErrorException {
        WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
        String openId = session.getOpenid();
        if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"获取openid失败!请联系管理员");
        }
        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"微信登录异常!请联系管理员");
        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                .eq(Member::getOpenId, openId)
                .eq(Member::getIsdeleted,Constants.ZERO)
                .eq(Member::getStatus,Constants.ZERO)
                .last(" limit 1"));
        AccountResponse accountResponse = new AccountResponse();
        if(Objects.nonNull(member)){
            String ossPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode();
            String memberPath = systemDictDataBiz.queryByCode(Constants.OSS,Constants.MEMBER_FILE).getCode();
            if(StringUtils.isNotBlank(member.getImgurl())){
                member.setImgFullUrl(ossPath + memberPath + member.getImgurl());
            }
            String token = JwtTokenUtil.generateTokenForRedis(member.getId(), Constants.ZERO, JSONObject.toJSONString(member), redisTemplate);
            accountResponse.setToken(token);
            accountResponse.setOpenid(openId);
            accountResponse.setMember(member);
        }else{
            accountResponse.setOpenid(openId);
        }
        return accountResponse;
    }
@@ -371,7 +375,6 @@
                if(!this.checkIsCreateInvite(phone)){
                    member.setRecId(wxPhoneRequest.getRecId());
                }
                member.setIntegral(BigDecimal.ZERO);
                member.setPhone(phone);
                member.setStatus(Constants.ZERO);
            }
@@ -424,7 +427,7 @@
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(member.getId());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.REGISTER);
            integralService.dealIntegral(dealIntegralRequest,null);
            integralService.dealIntegral(dealIntegralRequest,member);
        }
        //开启注册送优惠券
        if(Constants.equalsInteger(platformConfigDTO.getRegCouponRewardStatus(),Constants.ZERO)){
@@ -442,6 +445,20 @@
                    if(Objects.isNull(coupon)||Constants.equalsInteger(coupon.getIsdeleted(),Constants.ONE)&&num>Constants.ZERO){
                        continue;
                    }
                    if(coupon.getNum()>Constants.ZERO) {
                        //查询已领取数量
                        Integer getNum = memberCouponMapper.selectCount(new QueryWrapper<MemberCoupon>().lambda()
                                .eq(MemberCoupon::getIsdeleted, Constants.ZERO)
                                .eq(MemberCoupon::getCouponId, couponId)
                                .ne(MemberCoupon::getGetMethod, Constants.TWO)
                        ).intValue();
                        if (getNum >= coupon.getNum()) {
                            continue;
                        }
                        if (num > (coupon.getNum() - getNum)) {
                            num = coupon.getNum().intValue() - getNum;
                        }
                    }
                    MemberCoupon memberCoupon = MemberCoupon.couponToBean(coupon,member,new Date(),Constants.ZERO,null);
                    for (int i = 0; i < num; i++) {
                        //满减卷不会生成maxPrice 需要根据优惠券减少金额设置
@@ -450,6 +467,10 @@
                        }
                        memberCouponList.add(memberCoupon);
                    }
                    Notice notice = Notice.getNotice(Constants.NoticeType.COUPON,
                            member.getId(),null);
                    notice.setContent(notice.getContent().replace("{param}",Constants.getCouponInfo(memberCoupon,num)));
                    noticeMapper.insert(notice);
                }
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(memberCouponList)){
                    memberCouponJoinMapper.insert(memberCouponList);
@@ -480,17 +501,17 @@
        //赠送邀请积分
        //开启邀请注册送积分
        if(Constants.equalsInteger(platformConfigDTO.getShareIntegralRewardStatus(),Constants.ZERO)){
            member = memberMapper.selectById(member.getRecId());
            if(Objects.isNull(member)){
                return;
            }
            DealIntegralRequest dealIntegralRequest = new DealIntegralRequest();
            dealIntegralRequest.setIntegralNum(platformConfigDTO.getShareIntegralReward());
            dealIntegralRequest.setDealType(Constants.ZERO);
            dealIntegralRequest.setMemberId(member.getRecId());
            dealIntegralRequest.setIntegralObjType(Constants.IntegralObjType.INVITENEWUSER);
            dealIntegralRequest.setParam1(member.getNickname());
            integralService.dealIntegral(dealIntegralRequest,null);
            //添加消息记录
            integralService.dealIntegral(dealIntegralRequest,member);
        }
    }
@@ -686,7 +707,7 @@
        }
        this.verifyPhoneCode(request.getCode(),request.getPhone());
        memberMapper.update(new UpdateWrapper<Member>().lambda()
                .eq(Member::getPhone,request.getPhone())
                .set(Member::getPhone,request.getPhone())
                .eq(Member::getId,request.getMemberId())
        );
    }