Administrator
72 mins ago 2829e9784f691ee39e3b1bed75b586300d9d4aac
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.ai.entity.AiCompany;
import cc.mrbird.febs.ai.entity.AiCompanyMemberApply;
import cc.mrbird.febs.ai.entity.AiMember;
import cc.mrbird.febs.ai.enumerates.AiCommonEnum;
import cc.mrbird.febs.ai.mapper.AiCompanyMapper;
import cc.mrbird.febs.ai.mapper.AiCompanyMemberApplyMapper;
import cc.mrbird.febs.ai.mapper.AiMemberMapper;
@@ -32,6 +33,12 @@
import cc.mrbird.febs.vip.VipSettingUnAliveSettingBo;
import cc.mrbird.febs.vip.entity.MallVipConfig;
import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
import cc.mrbird.febs.yinhe.entity.YHAiCompany;
import cc.mrbird.febs.yinhe.entity.YHSysCompanyLevel;
import cc.mrbird.febs.yinhe.entity.YhAiMember;
import cc.mrbird.febs.yinhe.mapper.YHAiCompanyMapper;
import cc.mrbird.febs.yinhe.mapper.YHSysCompanyLevelMapper;
import cc.mrbird.febs.yinhe.mapper.YhAiMemberMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
@@ -695,16 +702,25 @@
    private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class);
    private final YhAiMemberMapper yhAiMemberMapper;
    private final YHAiCompanyMapper yhAiCompanyMapper;
    private final YHSysCompanyLevelMapper yhSysCompanyLevelMapper;
    @Override
    public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto) throws IOException {
    @Transactional
    public FebsResponse xcxLogin(ApiXcxLoginDto apiXcxLoginDto){
        log.info("登录请求参数:{}", JSONObject.toJSONString(apiXcxLoginDto));
        FebsResponse febsResponse = new FebsResponse();
        String code = apiXcxLoginDto.getCode();
        log.info("code:" + code);
        if (StrUtil.isNotBlank(code)) {
            String requrl = getXcxLoginUrl(code);
            String reslutData = HttpCurlUtil.sendGetHttp(requrl, null);
            String reslutData = null;
            try {
                reslutData = HttpCurlUtil.sendGetHttp(requrl, null);
            } catch (IOException e) {
                e.printStackTrace();
            }
            net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(reslutData);
            log.info("微信登录获取到登录信息={}", json);
@@ -717,118 +733,73 @@
            String sessionKey = json.getString("session_key");
            log.info("openId={},sessionKey={}", openId, sessionKey);
            // 查询用户是否存在
            MallMember mallMember = null;
            YhAiMember entity = null;
            synchronized (this) {
                mallMember = this.baseMapper.selectMemberByOpenId(openId);
                if (ObjectUtil.isEmpty(mallMember)) {
                Date systemTime = new Date();
                entity = yhAiMemberMapper.selectOne(
                        Wrappers.lambdaQuery(YhAiMember.class)
                        .eq(YhAiMember::getOpenId, openId)
                );
                if (ObjectUtil.isEmpty(entity)) {
                    // 新增用户
                    mallMember = new MallMember();
                    mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
                    mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
                    mallMember.setOpenId(openId);
                    mallMember.setSessionKey(sessionKey);
                    mallMember.setTradePassword(SecureUtil.md5("123456"));
                    entity = new YhAiMember();
                    entity.setOpenId(openId);
                    entity.setSessionKey(sessionKey);
                    if (StrUtil.isNotBlank(apiXcxLoginDto.getInviteId())) {
                        MallMember member = this.baseMapper.selectInfoByInviteId(apiXcxLoginDto.getInviteId());
                        if (member != null) {
                            mallMember.setReferrerId(member.getInviteId());
                    entity.setMemberUuid(UUID.getSimpleUUIDString());
                            //推荐人和推荐人链
                            boolean flag = false;
                            String parentId = mallMember.getReferrerId();
                            if (StrUtil.isBlank(parentId)) {
                                flag = true;
                            }
                            String ids = "";
                            while (!flag) {
                                if (StrUtil.isBlank(ids)) {
                                    ids += parentId;
                                } else {
                                    ids += ("," + parentId);
                                }
                                MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId);
                                if (parentMember == null) {
                                    break;
                                }
                                parentId = parentMember.getReferrerId();
                                if (StrUtil.isBlank(parentMember.getReferrerId())) {
                                    flag = true;
                                }
                            }
                            if (StrUtil.isNotBlank(ids)) {
                                mallMember.setReferrerIds(ids);
                            }
                        }
                    }
                    this.baseMapper.insert(mallMember);
                    AiMember aiMember = new AiMember();
                    aiMember.setId(UUID.getSimpleUUIDString());
                    log.info("公司编码={}", apiXcxLoginDto.getCompanyId());
                    if (StrUtil.isNotEmpty(apiXcxLoginDto.getCompanyId())){
                        AiCompany aiCompany = aiCompanyMapper.selectOne(
                                Wrappers.lambdaQuery(AiCompany.class)
                                        .eq(AiCompany::getCode, apiXcxLoginDto.getCompanyId())
                                        .last("limit 1")
                        YHAiCompany aiCompany = yhAiCompanyMapper.selectOne(
                                Wrappers.lambdaQuery(YHAiCompany.class)
                                        .eq(YHAiCompany::getCode, apiXcxLoginDto.getCompanyId())
                        );
                        if (ObjectUtil.isNotEmpty(aiCompany)){
                            aiMember.setCompanyId(aiCompany.getId());
                        if (ObjectUtil.isEmpty(aiCompany)){
                            throw new FebsException("公司编码错误");
                        }
                    }
                    aiMember.setCreatedTime(new Date());
                    aiMemberMapper.insert(aiMember);
                    mallMember = this.baseMapper.selectMemberByOpenId(openId);
                    String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId());
                    mallMember.setMemberUuid(aiMember.getId());
                    if (StrUtil.isNotEmpty(aiMember.getCompanyId())){
                        mallMember.setCompanyId(aiMember.getCompanyId());
                    }
                    mallMember.setInviteId(inviteId);
                    mallMember.setName("新用户"+inviteId);
                    this.baseMapper.updateById(mallMember);
                    MallMemberWallet wallet = new MallMemberWallet();
                    wallet.setBalance(BigDecimal.ZERO);
                    wallet.setMemberId(mallMember.getId());
                    mallMemberWalletMapper.insert(wallet);
                    //分销员的邀请码赠送优惠卷
                    if (StrUtil.isNotBlank(apiXcxLoginDto.getInviteId())) {
                        String couponUUID = IdUtil.simpleUUID();
                        //通过邀请人信息,获取能领取的优惠卷信息
                        MallMember refMember = this.baseMapper.selectInfoByInviteId(apiXcxLoginDto.getInviteId());
                        if(ObjectUtil.isNotEmpty(refMember)){
                            SalemanCoupon salemanCoupon = salemanCouponMapper.selectByMemberId(refMember.getId());
                            if(ObjectUtil.isNotEmpty(salemanCoupon)){
                                Long couponId = salemanCoupon.getCouponId();
                                List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectListByMemberIdCouponIdWithOutInviteId(mallMember.getId(), couponId);
                                if(CollUtil.isEmpty(mallMemberCoupons)){
                                    //商品优惠卷如果绑定了,那么当前登陆者获取一张卷
                                    MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(couponId);
                                    MallMemberCoupon mallMemberCoupon = new MallMemberCoupon();
                                    mallMemberCoupon.setCouponId(couponId);
                                    mallMemberCoupon.setCouponName(mallGoodsCoupon.getName());
                                    mallMemberCoupon.setMemberId(mallMember.getId());
                                    mallMemberCoupon.setCouponUuid(couponUUID);
                                    mallMemberCoupon.setInviteId(refMember.getInviteId());
                                    mallMemberCoupon.setState(1);
                                    mallMemberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(),mallGoodsCoupon.getExpireDay()));
                                    mallMemberCouponMapper.insert(mallMemberCoupon);
                                }
                            }
                        String levelCode = aiCompany.getLevelCode();
                        YHSysCompanyLevel yhSysCompanyLevel = yhSysCompanyLevelMapper.selectOne(
                                Wrappers.lambdaQuery(YHSysCompanyLevel.class)
                                        .eq(YHSysCompanyLevel::getCode, levelCode)
                        );
                        Integer memberNum = yhSysCompanyLevel.getMemberNum();
                        List<YhAiMember> yhAiMembers = yhAiMemberMapper.selectList(
                                Wrappers.lambdaQuery(YhAiMember.class)
                                        .eq(YhAiMember::getCompanyId, aiCompany.getId())
                                        .isNull(YhAiMember::getRoleId)
                        );
                        Integer realNum = CollUtil.isEmpty(yhAiMembers) ? 0 : yhAiMembers.size();
                        log.info("公司会员数:{}", realNum);
                        log.info("公司会员数:{}", memberNum);
                        log.info("公司会员数:{}", realNum >= memberNum);
                        if (realNum >= memberNum){
                            throw new FebsException("公司会员已满");
                        }
                        entity.setCompanyId(aiCompany.getId());
                    }
                    entity.setCreateTime(systemTime);
                    entity.setUpdateTime(systemTime);
                    entity.setLastLoginTime(systemTime);
                    yhAiMemberMapper.insert(entity);
                    entity = yhAiMemberMapper.selectOne(
                            Wrappers.lambdaQuery(YhAiMember.class)
                                    .eq(YhAiMember::getOpenId, openId)
                    );
                    String inviteId = ShareCodeUtil.toSerialCode(entity.getId());
                    entity.setInviteId(inviteId);
                    yhAiMemberMapper.updateById(entity);
                } else {
                    if (MallMember.ACCOUNT_STATUS_DISABLED.equals(mallMember.getAccountStatus())) {
                    if (entity.getAccountStatus() == 1) {
                        throw new FebsException("账号已停用");
                    }
                    mallMember.setSessionKey(sessionKey);
                    this.baseMapper.updateById(mallMember);
                    entity.setSessionKey(sessionKey);
                    entity.setLastLoginTime(systemTime);
                    yhAiMemberMapper.updateById(entity);
                }
            }
            // 存放redis
            String redisKey = AppContants.XCX_LOGIN_PREFIX + mallMember.getId();
            String redisKey = AppContants.XCX_LOGIN_PREFIX + entity.getMemberUuid();
            String existToken = redisUtils.getString(redisKey);
            if (StrUtil.isNotBlank(existToken)) {
                Object o = redisUtils.get(existToken);
@@ -836,14 +807,17 @@
                    redisUtils.del(existToken);
                }
            }
            YhAiMember yhAiMember = yhAiMemberMapper.selectById(entity.getId());
            String token = IdUtil.simpleUUID();
            redisUtils.set(token, JSONObject.toJSONString(mallMember), -1);
            redisUtils.set(redisKey, token, -1);
            redisUtils.set(token, JSONObject.toJSONString(yhAiMember), 60 * 60 * 24);
            redisUtils.set(redisKey, token, 60 * 60 * 24);
            Map<String, Object> authInfo = new HashMap<>();
            authInfo.put("token", token);
            authInfo.put("appid", xcxProperties.getXcxAppid());
            authInfo.put("member", mallMember);
            authInfo.put("rasToken", generateAsaToken(token));
            authInfo.put("member", yhAiMember);
            String rasToken = generateAsaToken(token);
            authInfo.put("rasToken", rasToken);
            log.info("登录成功rasToken={}", rasToken);
            febsResponse.success().data(authInfo);
        } else {
            return febsResponse.fail().message("自动登录失败");
@@ -856,110 +830,71 @@
    public FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto) {
        log.info("name={},phone={},avatar={},sex={}",
                apiXcxSaveInfoDto.getNickName(),apiXcxSaveInfoDto.getPhone(),apiXcxSaveInfoDto.getAvatarUrl(),apiXcxSaveInfoDto.getGender());
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallMember mallMember = this.baseMapper.selectById(memberId);
        String memberId = YHLoginUserUtil.getLoginUser().getMemberUuid();
        YhAiMember entity = yhAiMemberMapper.selectOne(
                Wrappers.lambdaQuery(YhAiMember.class)
                        .eq(YhAiMember::getMemberUuid, memberId)
        );
        String nickName = apiXcxSaveInfoDto.getNickName();
        if(StrUtil.isNotEmpty(nickName)){
            mallMember.setName(nickName);
            entity.setName(nickName);
        }
        String phone = apiXcxSaveInfoDto.getPhone();
        if(StrUtil.isNotEmpty(phone)){
            mallMember.setPhone(phone);
            entity.setPhone(phone);
        }
        String avatarUrl = apiXcxSaveInfoDto.getAvatarUrl();
        if(StrUtil.isNotEmpty(avatarUrl)){
            mallMember.setAvatar(avatarUrl);
            entity.setAvatar(avatarUrl);
        }
        if (StrUtil.isNotBlank(apiXcxSaveInfoDto.getRealName())) {
            mallMember.setRealName(apiXcxSaveInfoDto.getRealName());
            entity.setRealName(apiXcxSaveInfoDto.getRealName());
        }
        if (apiXcxSaveInfoDto.getBirthday() != null) {
            mallMember.setBirthday(apiXcxSaveInfoDto.getBirthday());
        }
        List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList();
        if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(configs)) {
            MallVipConfig mallVipConfig = configs.get(0);
            mallMember.setLevel(mallVipConfig.getCode());
            entity.setBirthday(apiXcxSaveInfoDto.getBirthday());
        }
        if(ObjectUtil.isNotEmpty(apiXcxSaveInfoDto.getGender())){
            mallMember.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
            entity.setSex(1 == apiXcxSaveInfoDto.getGender() ? "女" : "男");
        }
        String companyId = apiXcxSaveInfoDto.getCompanyId();
        if(ObjectUtil.isNotEmpty(apiXcxSaveInfoDto.getCompanyId())){
            AiCompany aiCompany = aiCompanyMapper.selectOne(
                    Wrappers.lambdaQuery(AiCompany.class)
                            .eq(AiCompany::getCode, apiXcxSaveInfoDto.getCompanyId())
                            .last("limit 1")
        if(ObjectUtil.isNotEmpty(companyId)){
            YHAiCompany aiCompany = yhAiCompanyMapper.selectOne(
                    Wrappers.lambdaQuery(YHAiCompany.class)
                            .eq(YHAiCompany::getCode, companyId)
            );
            if (ObjectUtil.isEmpty(aiCompany)){
                throw new FebsException("公司编码不存在");
            }
            if (ObjectUtil.isNotEmpty(aiCompany)){
                String levelCode = aiCompany.getLevelCode();
                YHSysCompanyLevel yhSysCompanyLevel = yhSysCompanyLevelMapper.selectOne(
                        Wrappers.lambdaQuery(YHSysCompanyLevel.class)
                                .eq(YHSysCompanyLevel::getCode, levelCode)
                );
                Integer memberNum = yhSysCompanyLevel.getMemberNum();
                List<YhAiMember> yhAiMembers = yhAiMemberMapper.selectList(
                        Wrappers.lambdaQuery(YhAiMember.class)
                                .eq(YhAiMember::getCompanyId, aiCompany.getId())
                                .isNull(YhAiMember::getRoleId)
                );
                Integer realNum = CollUtil.isEmpty(yhAiMembers) ? 0 : yhAiMembers.size();
                log.info("公司会员数:{}", realNum);
                log.info("公司会员数:{}", memberNum);
                log.info("公司会员数:{}", realNum >= memberNum);
                if (realNum >= memberNum){
                    throw new FebsException("公司会员已满");
                }
                companyId = aiCompany.getId();
            }
            entity.setCompanyId(companyId);
        }
        mallMember.setCompanyId(companyId);
        this.baseMapper.updateById(mallMember);
        yhAiMemberMapper.updateById(entity);
        String memberUuid = mallMember.getMemberUuid();
        AiMember aiMember = aiMemberService.getById(memberUuid);
        if (ObjectUtil.isNotEmpty(aiMember) && StrUtil.isNotEmpty(mallMember.getCompanyId())){
            aiMemberService.update(null,
                    Wrappers.lambdaUpdate(AiMember.class)
                    .set(AiMember::getCompanyId, mallMember.getCompanyId())
                    .eq(AiMember::getId, aiMember.getId())
                    );
        }
//        //完善信息赠送新人礼
//        if (StrUtil.isNotBlank(mallMember.getPhone()) && mallMember.getNewGift() == 0) {
//            DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
//                    CommonDictionaryEnum.NEW_GIFT_SETTING.getType(),
//                    CommonDictionaryEnum.NEW_GIFT_SETTING.getCode()
//            );
//            mallMember.setNewGift(1);
//            this.baseMapper.updateById(mallMember);
//
//            ApiNewGiftSettingDto apiNewGiftSettingDto = JSONObject.parseObject(dic.getValue(), ApiNewGiftSettingDto.class);
//            if (apiNewGiftSettingDto.getState() == 1) {
//                String prizeScore = apiNewGiftSettingDto.getPrizeScore();
//                BigDecimal bigDecimal = new BigDecimal(prizeScore).setScale(0, RoundingMode.HALF_DOWN);
//                if (bigDecimal.compareTo(BigDecimal.ZERO) > 0) {
//                    walletService.add(bigDecimal, mallMember.getId(), "prizeScore");
//                    mallMoneyFlowService.addMoneyFlow(
//                            mallMember.getId(),
//                            bigDecimal,
//                            ScoreFlowTypeEnum.MEMBER_INFO_GIFT.getValue(),
//                            MallUtils.getOrderNum(),
//                            FlowTypeEnum.PRIZE_SCORE.getValue(),
//                            StrUtil.format(ScoreFlowTypeEnum.MEMBER_INFO_GIFT.getDesc(),bigDecimal),
//                            2
//                    );
//                }
//                if (apiNewGiftSettingDto.getCouponId() != null) {
//                    MallGoodsCoupon mallGoodsCoupon = mallGoodsCouponMapper.selectById(apiNewGiftSettingDto.getCouponId());
//                    if(ObjectUtil.isNotEmpty(mallGoodsCoupon)){
//                        MallMemberCoupon memberCoupon = new MallMemberCoupon();
//                        memberCoupon.setCouponId(mallGoodsCoupon.getId());
//                        memberCoupon.setCouponName(mallGoodsCoupon.getName());
//                        memberCoupon.setInviteId(mallMember.getInviteId());
//                        memberCoupon.setCouponUuid(IdUtil.simpleUUID());
//                        memberCoupon.setState(1);
//                        memberCoupon.setFromType(3);
//                        memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), mallGoodsCoupon.getExpireDay()));
//                        memberCoupon.setMemberId(mallMember.getId());
//                        mallMemberCouponMapper.insert(memberCoupon);
//                    }
//                }
//
//            }
//        }
        return new FebsResponse().success();
    }
@@ -2193,6 +2128,13 @@
        return new FebsResponse().success().message("操作成功");
    }
    @Override
    public FebsResponse getCompanyCode() {
        String companyCode = yhAiCompanyMapper.selectDictLabel("xcx_register_default","default");
        return new FebsResponse().success().data(companyCode);
    }
//    public static void main(String[] args) {
//        Long userld = 16425L;
//        String shopAccount = "爱和美医疗";