From 94c37234aaf2c81100a0dac36b5614075a8e91e5 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Thu, 09 Jan 2025 15:08:52 +0800 Subject: [PATCH] refactor(mall): 优化会员信息修改功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 295 ++++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 253 insertions(+), 42 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index 1279ee7..194a26d 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -1,12 +1,16 @@ package cc.mrbird.febs.mall.service.impl; import cc.mrbird.febs.common.entity.FebsResponse; -import cc.mrbird.febs.common.enumerates.*; +import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; +import cc.mrbird.febs.common.enumerates.FlowTypeEnum; +import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.properties.XcxProperties; import cc.mrbird.febs.common.utils.*; import cc.mrbird.febs.mall.conversion.MallMemberConversion; import cc.mrbird.febs.mall.conversion.MallShopApplyConversion; +import cc.mrbird.febs.mall.conversion.MallStoreConversion; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; @@ -14,6 +18,7 @@ import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.pay.model.BrandWCPayRequestData; import cc.mrbird.febs.pay.service.IXcxPayService; +import cc.mrbird.febs.pay.util.MD5; import cc.mrbird.febs.vip.VipSettingUnAliveSettingBo; import cc.mrbird.febs.vip.entity.MallVipConfig; import cc.mrbird.febs.vip.mapper.MallVipConfigMapper; @@ -27,6 +32,7 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.json.JSONArray; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -37,8 +43,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.security.SecurityProperties; -import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -80,6 +84,9 @@ private final MallGoodsMapper mallGoodsMapper; private final MallVipConfigMapper mallVipConfigMapper; + private final MallStoreMapper mallStoreMapper; + private final MallStoreItemMapper mallStoreItemMapper; + private final MallStoreMemberMapper mallStoreMemberMapper; @Value("${spring.profiles.active}") @@ -88,20 +95,21 @@ @Transactional(rollbackFor = Exception.class) @Override public FebsResponse register(RegisterDto registerDto) { - MallMember mallMember = this.baseMapper.selectInfoByAccount(registerDto.getAccount()); - if (mallMember != null) { - throw new FebsException("该账号已被占用"); - } - - List<MallMember> mallMembers = this.baseMapper.selectMemberByName(registerDto.getName()); - if (CollUtil.isNotEmpty(mallMembers)) { - MallRegisterAppeal registerAppeal = mallRegisterAppealMapper.selectByPhoneAndName(registerDto.getName(), registerDto.getAccount()); - if (registerAppeal == null || registerAppeal.getStatus() != 1) { - return new FebsResponse().code(HttpStatus.ACCEPTED).message("用户名已存在"); - } - } - String account = registerDto.getAccount(); + MallMember mallMember = this.baseMapper.selectInfoByAccount(account); + if (mallMember != null) { + throw new FebsException("手机号已注册"); + } + /** + * 验证两次密码是否一致 + */ + String password = registerDto.getPassword(); + String passwordAgain = registerDto.getPasswordAgain(); + if(!password.equals(passwordAgain)){ + throw new FebsException("密码不一致"); + } + + //邀请码为admin的时候(后台添加用户),不需要验证验证码 if (!"admin".equals(registerDto.getRegistType())) { String code = registerDto.getCode(); boolean flags = commonService.verifyCode(account, code); @@ -119,22 +127,23 @@ } else { mallMember.setEmail(registerDto.getAccount()); } - + //对于邀请码的验证和上级联系人的验证 Integer count = this.baseMapper.selectCount(null); if (count != null && count != 0) { - MallMember inviteMember = this.baseMapper.selectInfoByInviteId(registerDto.getInviteId()); - if (inviteMember == null) { - throw new FebsException("邀请码不存在"); + if(!StrUtil.isEmpty(registerDto.getInviteId())){ + String inviteId = registerDto.getInviteId(); + MallMember inviteMember = this.baseMapper.selectInfoByInviteId(inviteId); + if (inviteMember == null) { + throw new FebsException("邀请码不存在"); + } + mallMember.setReferrerId(registerDto.getInviteId()); } - - mallMember.setReferrerId(registerDto.getInviteId()); - } - mallMember.setName(registerDto.getName()); + mallMember.setName(account); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); mallMember.setSex("男"); - mallMember.setBindPhone(registerDto.getAccount()); + mallMember.setBindPhone(account); this.baseMapper.insert(mallMember); @@ -166,6 +175,12 @@ if (StrUtil.isNotBlank(ids)) { mallMember.setReferrerIds(ids); + } + //会员VIP等级 + List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList(); + if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(configs)) { + MallVipConfig mallVipConfig = configs.get(0); + mallMember.setLevel(mallVipConfig.getCode()); } this.baseMapper.updateById(mallMember); @@ -237,7 +252,7 @@ public FebsResponse logout() { Long id = LoginUserUtil.getLoginUser().getId(); - String redisKey = AppContants.XCX_LOGIN_PREFIX + id; + String redisKey = AppContants.APP_LOGIN_PREFIX + id; String existToken = redisUtils.getString(redisKey); if (StrUtil.isNotBlank(existToken)) { Object o = redisUtils.get(existToken); @@ -245,7 +260,7 @@ redisUtils.del(existToken); } } - redisUtils.del(AppContants.XCX_LOGIN_PREFIX + id); + redisUtils.del(AppContants.APP_LOGIN_PREFIX + id); redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id); return new FebsResponse().success().message("退出登录"); } @@ -338,8 +353,8 @@ @Override public FebsResponse modifyMemberInfo(ModifyMemberInfoDto modifyMemberInfoDto) { - MallMember member = LoginUserUtil.getLoginUser(); - MallMember mallMember = this.baseMapper.selectById(member.getId()); + Long memberId = LoginUserUtil.getLoginUser().getId(); + MallMember mallMember = this.baseMapper.selectById(memberId); if (StrUtil.isNotBlank(modifyMemberInfoDto.getName())) { mallMember.setName(modifyMemberInfoDto.getName()); } @@ -347,6 +362,9 @@ if (StrUtil.isNotBlank(modifyMemberInfoDto.getPhoto())) { mallMember.setAvatar(modifyMemberInfoDto.getPhoto()); } + + mallMember.setSex(modifyMemberInfoDto.getSex()); + mallMember.setBirthday(DateUtil.parseDate(modifyMemberInfoDto.getBirthday())); this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("修改成功"); @@ -385,11 +403,11 @@ moneyFlowDto.setMemberId(id); IPage<MoneyFlowVo> pages = mallMoneyFlowMapper.selectApiMoneyFlowInPage(page, moneyFlowDto); -// if (moneyFlowDto.getFlowType() == 3) { -// pages.getRecords().forEach(item -> { -// item.setDescription(ScoreFlowTypeEnum.getDescByValue(item.getType())); -// }); -// } + if (moneyFlowDto.getFlowType() == 3) { + pages.getRecords().forEach(item -> { + item.setDescription(ScoreFlowTypeEnum.getDescByValue(item.getType())); + }); + } return new FebsResponse().success().data(pages); } @@ -622,7 +640,6 @@ mallMember = new MallMember(); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); - mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); mallMember.setOpenId(openId); mallMember.setSessionKey(sessionKey); @@ -726,7 +743,7 @@ } List<MallVipConfig> configs = mallVipConfigMapper.selectVipConfigList(); - if (CollUtil.isNotEmpty(configs)) { + if (StrUtil.isBlank(mallMember.getLevel()) && CollUtil.isNotEmpty(configs)) { MallVipConfig mallVipConfig = configs.get(0); mallMember.setLevel(mallVipConfig.getCode()); } @@ -751,7 +768,6 @@ mallMember.setPhone(phone); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); - mallMember.setLevel(AgentLevelEnum.ZERO_LEVEL.name()); this.baseMapper.insert(mallMember); String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId()); @@ -1006,7 +1022,10 @@ Long memberId = LoginUserUtil.getLoginUser().getId(); mallMemberCouponDto.setMemberId(memberId); mallMemberCouponDto.setExpireTime(DateUtil.date()); - List<Long> couponIds = couponGoodsMapper.selectByGoodId(mallMemberCouponDto.getGoodsId()); +// List<Long> couponIds = couponGoodsMapper.selectByGoodId(mallMemberCouponDto.getGoodsId()); + List<Long> goodsIdList = mallMemberCouponDto.getGoodsIdList(); + List<Long> couponIds = couponGoodsMapper.selectByGoodIdList(goodsIdList); + List<MallMemberCouponVo> mallMemberCouponVos = new ArrayList<>(); if(CollUtil.isNotEmpty(couponIds)){ mallMemberCouponVos = mallMemberCouponMapper.selectListCreateInPage(mallMemberCouponDto,couponIds); @@ -1087,10 +1106,7 @@ MallMember member = this.baseMapper.selectById(loginUser.getId()); - MallMember mallMember = new MallMember(); - mallMember.setId(member.getId()); - mallMember.setLastLoginTime(new Date()); - this.baseMapper.updateById(mallMember); + this.baseMapper.updateLastLogin(member.getId(),new Date()); DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.UNALIVE_COUPON.getType(), DataDictionaryEnum.UNALIVE_COUPON.getCode()); if (dic == null || StrUtil.isBlank(dic.getValue())) { @@ -1118,6 +1134,24 @@ .eq(MallGoodsCoupon::getState, 2); List<MallGoodsCoupon> coupons = mallGoodsCouponMapper.selectList(query); + LambdaQueryWrapper<MallMemberCoupon> memberCouponQuery = new LambdaQueryWrapper<>(); + memberCouponQuery.in(MallMemberCoupon::getCouponId, couponIds) + .eq(MallMemberCoupon::getMemberId, member.getId()) + .eq(MallMemberCoupon::getFromType, 3) + .ge(MallMemberCoupon::getCreatedTime, DateUtil.beginOfDay(new Date())) + .le(MallMemberCoupon::getCreatedTime, DateUtil.endOfDay(new Date())); + List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectList(memberCouponQuery); + if (CollUtil.isNotEmpty(mallMemberCoupons)) { + Map<Long, MallMemberCoupon> map = mallMemberCoupons.stream().collect(Collectors.toMap(MallMemberCoupon::getCouponId, MallMemberCoupon -> MallMemberCoupon)); + coupons = coupons.stream().filter(item -> { + return map.get(item.getId()) == null; + }).collect(Collectors.toList()); + } + + if (CollUtil.isEmpty(coupons)) { + return new HashMap<>(); + } + coupons.forEach(item -> { MallMemberCoupon memberCoupon = new MallMemberCoupon(); memberCoupon.setCouponId(item.getId()); @@ -1125,6 +1159,7 @@ memberCoupon.setInviteId(member.getInviteId()); memberCoupon.setCouponUuid(IdUtil.simpleUUID()); memberCoupon.setState(1); + memberCoupon.setFromType(3); memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), item.getExpireDay())); memberCoupon.setMemberId(member.getId()); mallMemberCouponMapper.insert(memberCoupon); @@ -1135,5 +1170,181 @@ return result; } + @Override + public FebsResponse storeList(MallStoreDto mallStoreDto) { + QueryWrapper<MallStore> mallStoreQueryWrapper = new QueryWrapper<>(); + if(StrUtil.isNotEmpty(mallStoreDto.getName())){ + mallStoreQueryWrapper.like("name",mallStoreDto.getName()); + } + List<MallStore> mallStores = mallStoreMapper.selectList(mallStoreQueryWrapper); + List<MallStoreVo> mallStoreVos = MallStoreConversion.INSTANCE.entitysToVos(mallStores); + return new FebsResponse().success().data(mallStoreVos); + } + + @Override + public FebsResponse storeItemList(MallStoreItemDto mallStoreItemDto) { + QueryWrapper<MallStoreItem> mallStoreQueryWrapper = new QueryWrapper<>(); + mallStoreQueryWrapper.like("store_id",mallStoreItemDto.getStoreId()); + List<MallStoreItem> mallStores = mallStoreItemMapper.selectList(mallStoreQueryWrapper); + return new FebsResponse().success().data(mallStores); + } + + @Override + public FebsResponse bindStoreMember(BindStoreMemberDto bindStoreMemberDto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + Long storeItemId = bindStoreMemberDto.getStoreItemId(); + + QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",memberId); + List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper); + if(CollUtil.isNotEmpty(mallStoreMembers)){ + mallStoreMemberMapper.delete(objectQueryWrapper); + } + + MallMember mallMember = this.baseMapper.selectById(memberId); + Integer sex = "女".equals(mallMember.getSex()) ? 3 : 2; + + MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId); + HashMap<String, String> objectObjectHashMap = new HashMap<>(); + String shopAccount = mallStoreItem.getAccount(); + String shopPwd = mallStoreItem.getPassword(); + String name = bindStoreMemberDto.getName(); + String address = bindStoreMemberDto.getAddress(); + Integer age = bindStoreMemberDto.getAge(); + String phoneNumber = bindStoreMemberDto.getPhone(); + + objectObjectHashMap.put("shopAccount",shopAccount); + objectObjectHashMap.put("shopPwd",shopPwd); + objectObjectHashMap.put("name",name); + objectObjectHashMap.put("address",address); + objectObjectHashMap.put("age",age.toString()); + objectObjectHashMap.put("phoneNumber",phoneNumber); + objectObjectHashMap.put("sex",sex.toString()); + + //sign= MD5(address+age+name+phoneNumber+shopAccount+shopPwd) + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(address); + stringBuffer.append(age); + stringBuffer.append(name); + stringBuffer.append(phoneNumber); + stringBuffer.append(sex); + stringBuffer.append(shopAccount); + stringBuffer.append(shopPwd); + String sign = MD5.MD5Encode(stringBuffer.toString()); + objectObjectHashMap.put("sign",sign); + String url = "https://data.muchun.co/api/bindCustomer"; + String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); + Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); + String message = JSONUtil.parseObj(result).getStr("message"); + if(0 != retCode || !"绑定成功".equals(message)){ + return new FebsResponse().fail().message(message); + } + Long bindId = JSONUtil.parseObj(result).getJSONObject("data").getLong("userId"); + + MallStoreMember mallStoreMember = new MallStoreMember(); + mallStoreMember.setMemberId(memberId); + mallStoreMember.setBindId(bindId); + mallStoreMember.setStoreId(mallStoreItem.getStoreId()); + mallStoreMember.setStoreItemId(mallStoreItem.getId()); + + mallStoreMember.setAccount(shopAccount); + mallStoreMember.setPassword(shopPwd); + + mallStoreMember.setName(name); + mallStoreMember.setAddress(address); + mallStoreMember.setAge(age); + mallStoreMember.setPhone(phoneNumber); + mallStoreMemberMapper.insert(mallStoreMember); + return new FebsResponse().success().message("绑定成功"); + } + + @Override + public FebsResponse bindList() { + Long memberId = LoginUserUtil.getLoginUser().getId(); + QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",memberId); + List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper); + + ArrayList<MallStoreMemberVo> mallStoreMemberVos = new ArrayList<>(); + for(MallStoreMember mallStoreMember : mallStoreMembers){ + MallStoreMemberVo mallStoreMemberVo = new MallStoreMemberVo(); + Long storeId = mallStoreMember.getStoreId(); + Long storeItemId = mallStoreMember.getStoreItemId(); + MallStore mallStore = mallStoreMapper.selectById(storeId); + MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId); + mallStoreMemberVo.setId(mallStoreMember.getId()); + mallStoreMemberVo.setBindInfo(mallStore.getName()+"-"+mallStoreItem.getCode()); + mallStoreMemberVos.add(mallStoreMemberVo); + } + return new FebsResponse().success().data(mallStoreMemberVos); + } + + @Override + public FebsResponse bindResult(BindResultDto bindResultDto) { + Long memberId = LoginUserUtil.getLoginUser().getId(); + MallStoreMember mallStoreMember = mallStoreMemberMapper.selectById(bindResultDto.getBindId()); + Long userld = mallStoreMember.getBindId(); + String shopAccount = mallStoreMember.getAccount(); + String shopPwd = mallStoreMember.getPassword(); + + HashMap<String, String> objectObjectHashMap = new HashMap<>(); + + objectObjectHashMap.put("shopAccount",shopAccount); + objectObjectHashMap.put("shopPwd",shopPwd); + objectObjectHashMap.put("userId",userld.toString()); + + //sign= MD5(shopAccount+shopPwd+userId) + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(shopAccount); + stringBuffer.append(shopPwd); + stringBuffer.append(userld); + String sign = MD5.MD5Encode(stringBuffer.toString()); + objectObjectHashMap.put("sign",sign); + + String url = "https://data.muchun.co/api/getCustomerCheckRecords"; + String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); + Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); + String message = JSONUtil.parseObj(result).getStr("message"); + if(0 != retCode){ + return new FebsResponse().fail().message(message); + } + JSONArray data = JSONUtil.parseObj(result).getJSONArray("data"); + return new FebsResponse().success().data(data); + } + + public static void main(String[] args) { + Long userld = 173L; + String shopAccount = "luohu"; + String shopPwd = "123456"; + + HashMap<String, String> objectObjectHashMap = new HashMap<>(); + + objectObjectHashMap.put("shopAccount",shopAccount); + objectObjectHashMap.put("shopPwd",shopPwd); + objectObjectHashMap.put("userId",userld.toString()); + + //sign= MD5(shopAccount+shopPwd+userId) + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(shopAccount); + stringBuffer.append(shopPwd); + stringBuffer.append(userld); + String sign = MD5.MD5Encode(stringBuffer.toString()); + objectObjectHashMap.put("sign",sign); + + System.out.println(sign); + + System.out.println(objectObjectHashMap); + String url = "https://data.muchun.co/api/getCustomerCheckRecords"; + String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); + Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); + String message = JSONUtil.parseObj(result).getStr("message"); + if(0 != retCode){ + System.out.println(message); + } + + JSONArray data = JSONUtil.parseObj(result).getJSONArray("data"); + System.out.println(data); + } + } -- Gitblit v1.9.1