From f92107718d728a2bfa6e7bb3127007586616d5ee Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Mon, 28 Apr 2025 11:41:26 +0800 Subject: [PATCH] feat(mall): 添加活动评价功能 --- src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java | 398 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 382 insertions(+), 16 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java index 6bd1809..5bb762f 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java @@ -3,31 +3,34 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; -import cc.mrbird.febs.common.enumerates.FlowTypeEnum; import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum; +import cc.mrbird.febs.common.enumerates.StateUpDownEnum; import cc.mrbird.febs.common.exception.FebsException; -import cc.mrbird.febs.common.utils.LoginUserUtil; -import cc.mrbird.febs.common.utils.MallUtils; +import cc.mrbird.febs.common.utils.AppContants; +import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; -import cc.mrbird.febs.mall.entity.MallNewsInfo; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.service.IAdminMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; +import cc.mrbird.febs.pay.model.MemberWithdrawalDto; +import cc.mrbird.febs.pay.service.IXcxPayService; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.xmlbeans.impl.store.Query; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -44,6 +47,8 @@ @RequiredArgsConstructor @Transactional public class AdminMallMemberServiceImpl extends ServiceImpl<MallMemberMapper, MallMember> implements IAdminMallMemberService { + + private final RedisUtils redisUtils; private final MallMemberMapper mallMemberMapper; @@ -64,12 +69,32 @@ private final MallShopApplyMapper mallShopApplyMapper; private final IMallMoneyFlowService mallMoneyFlowService; + private final MallTeamLeaderMapper mallTeamLeaderMapper; + + private final MallAgentRecordMapper mallAgentRecordMapper; + private final MallSalesmanMapper mallSalesmanMapper; + private final SalemanCouponMapper salemanCouponMapper; + private final MallMemberCouponMapper mallMemberCouponMapper; + private final MallGoodsCouponMapper mallGoodsCouponMapper; @Override public IPage<MallMember> getMallMemberList(MallMember mallMember, QueryRequest request) { Page<MallMember> page = new Page<>(request.getPageNum(), request.getPageSize()); - IPage<MallMember> mallMembers = this.baseMapper.selectMallMemberListInPage(page, mallMember); - return mallMembers; + LambdaQueryWrapper<MallMember> mallMemberLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ObjectUtil.isNotEmpty(mallMember.getName())){ + mallMemberLambdaQueryWrapper.like(MallMember::getName, mallMember.getName()); + } + if(ObjectUtil.isNotEmpty(mallMember.getPhone())){ + mallMemberLambdaQueryWrapper.eq(MallMember::getPhone, mallMember.getPhone()); + } + if(ObjectUtil.isNotEmpty(mallMember.getCheckOrder())){ + mallMemberLambdaQueryWrapper.eq(MallMember::getCheckOrder, mallMember.getCheckOrder()); + } + mallMemberLambdaQueryWrapper.orderByDesc(MallMember::getId); + + Page<MallMember> mallMemberPage = this.baseMapper.selectPage(page, mallMemberLambdaQueryWrapper); +// IPage<MallMember> mallMembers = this.baseMapper.selectMallMemberListInPage(page, mallMember); + return mallMemberPage; } @Override @@ -141,6 +166,8 @@ return adminMoneyChargeListVos; } + private final IXcxPayService iXcxPayService; + @Override @Transactional public FebsResponse chargeAgree(Long id) { @@ -152,16 +179,26 @@ if(1 != mallMemberWithdraw.getStatus()){ return new FebsResponse().fail().message("当前状态不是提现中"); } - mallMemberWithdraw.setStatus(2); - mallMemberWithdrawMapper.updateById(mallMemberWithdraw); QueryWrapper<MallMoneyFlow> objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("order_no",mallMemberWithdraw.getWithdrawNo()); objectQueryWrapper.eq("type",MoneyFlowTypeEnum.WITHDRAWAL.getValue()); MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOne(objectQueryWrapper); + Long memberId = mallMemberWithdraw.getMemberId(); + MallMember mallMember = mallMemberMapper.selectById(memberId); + MemberWithdrawalDto memberWithdrawalDto = new MemberWithdrawalDto(); + memberWithdrawalDto.setDesc("余额提现"); + memberWithdrawalDto.setOpenid(mallMember.getOpenId()); + memberWithdrawalDto.setTotalFee(mallMemberWithdraw.getAmount()); + memberWithdrawalDto.setOutTradeNo(mallMoneyFlow.getOrderNo()); + Boolean aBoolean = iXcxPayService.memberWithdrawal(memberWithdrawalDto); + if(!aBoolean){ + return new FebsResponse().fail().message("微信提现失败,请查看微信商户状态"); + } + mallMemberWithdraw.setStatus(2); + mallMemberWithdrawMapper.updateById(mallMemberWithdraw); mallMoneyFlow.setStatus(2); mallMoneyFlowMapper.updateById(mallMoneyFlow); - return new FebsResponse().success(); } @@ -251,6 +288,126 @@ @Override public List<AdminAgentLevelOptionTreeVo> getAgentLevelOption() { return dataDictionaryCustomMapper.getAgentLevelOption(); + } + + + @Override + public List<AdminAgentLevelOptionTreeVo> agentLevelOption() { + return dataDictionaryCustomMapper.agentLevelOption(); + } + + @Override + public FebsResponse agentVerifyUpdate(AdminAgentVerifyVo adminAgentVerifyVo) { + MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(adminAgentVerifyVo.getId()); + if(ObjectUtil.isEmpty(mallAgentRecord)){ + throw new FebsException("记录不存在"); + } + BigDecimal amount = adminAgentVerifyVo.getAmount(); + if(BigDecimal.ZERO.compareTo(amount) >= 0){ + throw new FebsException("请输入正确的金额"); + } +// if(StrUtil.isEmpty(adminAgentVerifyVo.getLevelCode())){ +// throw new FebsException("请选择代理级别"); +// } +// mallAgentRecord.setAgentLevel(adminAgentVerifyVo.getLevelCode()); + mallAgentRecord.setAmount(adminAgentVerifyVo.getAmount()); + mallAgentRecordMapper.updateById(mallAgentRecord); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse doctorStateChange(Long id) { + MallMember mallMember = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(mallMember)){ + throw new FebsException("请刷新页面"); + } + mallMember.setDoctorState(mallMember.getDoctorState() == 1 ? 0 : 1); + this.baseMapper.updateById(mallMember); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse upCoupon(Long id) { + MallMember mallMember = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(mallMember)){ + throw new FebsException("请刷新页面"); + } + mallMember.setIsSale(1); + this.baseMapper.updateById(mallMember); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse downCoupon(Long id) { + MallMember mallMember = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(mallMember)){ + throw new FebsException("请刷新页面"); + } + mallMember.setIsSale(2); + this.baseMapper.updateById(mallMember); + + QueryWrapper<SalemanCoupon> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",mallMember.getId()); + List<SalemanCoupon> salemanCouponList = salemanCouponMapper.selectList(objectQueryWrapper); + if(CollUtil.isNotEmpty(salemanCouponList)){ + for(SalemanCoupon salemanCoupon : salemanCouponList){ + salemanCouponMapper.deleteById(salemanCoupon); + } + } + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse memberOut(Long id) { + + MallMember mallMember = this.baseMapper.selectById(id); + if(ObjectUtil.isEmpty(mallMember)){ + throw new FebsException("请刷新页面"); + } + String redisKey = AppContants.XCX_LOGIN_PREFIX + mallMember.getId(); + String existToken = redisUtils.getString(redisKey); + if (StrUtil.isNotBlank(existToken)) { + Object o = redisUtils.get(existToken); + if (ObjectUtil.isNotEmpty(o)) { + redisUtils.del(existToken); + } + } + redisUtils.del(AppContants.XCX_LOGIN_PREFIX + id); + redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id); + this.baseMapper.deleteById(mallMember); + return new FebsResponse().success().message("操作成功"); + } + + @Override + public IPage<MallMember> getsalemanRuleList(MallMember mallMember, QueryRequest request) { + Page<MallMember> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MallMember> mallMembers = this.baseMapper.getsalemanRuleList(page, mallMember); + return mallMembers; + } + + @Override + public FebsResponse salemanCoupon(MallMember mallmember) { + MallMember member = this.baseMapper.selectById(mallmember.getId()); + if(ObjectUtil.isEmpty(member)){ + throw new FebsException("请刷新页面"); + } + Long couponId = mallmember.getCouponId(); + + QueryWrapper<SalemanCoupon> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("member_id",member.getId()); + List<SalemanCoupon> salemanCouponList = salemanCouponMapper.selectList(objectQueryWrapper); + if(CollUtil.isNotEmpty(salemanCouponList)){ + SalemanCoupon salemanCoupon = salemanCouponList.get(0); + salemanCoupon.setCouponId(couponId); + salemanCouponMapper.updateById(salemanCoupon); + return new FebsResponse().success().message("操作成功"); + } + SalemanCoupon salemanCoupon = new SalemanCoupon(); + salemanCoupon.setMemberId(member.getId()); + salemanCoupon.setCouponId(couponId); + salemanCouponMapper.insert(salemanCoupon); + return new FebsResponse().success().message("操作成功"); } @Override @@ -551,16 +708,29 @@ @Override @Transactional(rollbackFor = Exception.class) public void modifyReferer(MallMember member) { - MallMember referer = this.baseMapper.selectInfoByInviteId(member.getReferrerId()); + if(StrUtil.isEmpty(member.getReferrerId())){ + this.baseMapper.updateReferrerId(member.getId()); + return; + } + String referrerId = member.getReferrerId();//新的推荐人邀请码 + //获取新推荐人信息 + MallMember referer = this.baseMapper.selectInfoByInviteId(referrerId); if (referer == null) { throw new FebsException("推荐人不存在"); } - String refererId = member.getReferrerId(); + member = this.baseMapper.selectById(member.getId());//修改的用户 - member = this.baseMapper.selectById(member.getId()); - - String beforeReferer = member.getReferrerId(); - member.setReferrerId(refererId); + if(member.getInviteId().equals(referrerId)){ + throw new FebsException("自己不能推荐自己"); + } + String refererId = referer.getInviteId();//新推荐人的邀请码 + if(StrUtil.isNotEmpty(referer.getReferrerIds())){ + if (referer.getReferrerIds().contains(member.getInviteId())) { + throw new FebsException("修改的推荐关系不符合规则"); + } + } +// String beforeReferer = member.getReferrerId(); + member.setReferrerId(refererId);//更新用户的上级推荐人为新推荐人的邀请码refererId String refererIds = refererIds(refererId); member.setReferrerIds(refererIds); this.baseMapper.updateById(member); @@ -574,6 +744,171 @@ child.setReferrerIds(member.getInviteId() + "," + refererIds); this.baseMapper.updateById(child); } + } + + @Override + public IPage<MallAgentRecord> getAgentApplyList(MallAgentRecord mallAgentRecord, QueryRequest request) { + Page<MallAgentRecord> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MallAgentRecord> mallAgentRecords = mallAgentRecordMapper.selectMallAgentRecordListInPage(page, mallAgentRecord); + return mallAgentRecords; + } + + @Override + @Transactional + public FebsResponse agreeAgentApply(Long id) { + MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(id); + if(ObjectUtil.isEmpty(mallAgentRecord)){ + return new FebsResponse().fail().message("申请记录不存在"); + } + mallAgentRecord.setState(MallAgentRecord.APPLY_AGREE); + mallAgentRecordMapper.updateById(mallAgentRecord); + + //更新用户表中的LEVEL + MallMember mallMember = this.baseMapper.selectById(mallAgentRecord.getMemberId()); + if(ObjectUtil.isEmpty(mallMember)){ + return new FebsResponse().fail().message("用户不存在"); + } + mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); + this.baseMapper.updateById(mallMember); + return new FebsResponse().success(); + } + + @Override + @Transactional + public FebsResponse disagreeAgentApply(Long id) { + MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(id); + if(ObjectUtil.isEmpty(mallAgentRecord)){ + return new FebsResponse().fail().message("申请记录不存在"); + } + mallAgentRecord.setState(MallAgentRecord.APPLY_DISAGREE); + mallAgentRecordMapper.updateById(mallAgentRecord); + return new FebsResponse().success(); + } + + @Override + public IPage<MallSalesman> getMallSalesmanListInPage(MallSalesman mallSalesman, QueryRequest request) { + Page<MallSalesman> page = new Page<>(request.getPageNum(), request.getPageSize()); + return mallSalesmanMapper.selectMallSalesmanListInPage(page, mallSalesman); + } + + @Override + public FebsResponse addSalesman(MallSalesman mallSalesman) { + mallSalesmanMapper.insert(mallSalesman); + return new FebsResponse().success(); + } + + @Override + public FebsResponse salesmanDel(Long id) { + MallSalesman mallSalesman = mallSalesmanMapper.selectById(id); + if(ObjectUtil.isEmpty(mallSalesman)){ + return new FebsResponse().fail().message("推销员不存在"); + } + mallSalesman.setState(2); + mallSalesmanMapper.updateById(mallSalesman); + return new FebsResponse().success(); + } + + @Override + public FebsResponse salesmanUpdate(MallSalesman mallSalesman) { + MallSalesman mallSalesmanNow = mallSalesmanMapper.selectById(mallSalesman.getId()); + if(ObjectUtil.isEmpty(mallSalesmanNow)){ + return new FebsResponse().fail().message("推销员不存在"); + } + mallSalesmanMapper.updateById(mallSalesman); + return new FebsResponse().success(); + } + + @Override + public FebsResponse salesmanUse(Long id) { + MallSalesman mallSalesman = mallSalesmanMapper.selectById(id); + if(ObjectUtil.isEmpty(mallSalesman)){ + return new FebsResponse().fail().message("推销员不存在"); + } + mallSalesman.setState(1); + mallSalesmanMapper.updateById(mallSalesman); + return new FebsResponse().success(); + } + + @Override + public List<AdminMallSalesmansTreeVo> getSalesmansTree() { + List<AdminMallSalesmansTreeVo> adminMallSalesmansTreeVos = mallSalesmanMapper.selectTreeByState(1); + return adminMallSalesmansTreeVos; + } + + @Override + public FebsResponse memberUpdateSalesman(MallMember mallmember) { + MallMember mallMemberNow = mallMemberMapper.selectById(mallmember.getId()); + if(ObjectUtil.isEmpty(mallMemberNow)){ + return new FebsResponse().fail().message("用户不存在"); + } + mallMemberNow.setSalesmansId(mallmember.getSalesmansId()); + mallMemberMapper.updateById(mallMemberNow); + return new FebsResponse().success(); + } + + @Override + public IPage<AdminMallAddressInfoVo> getAddressAmountList(MallAddressInfo mallAddressInfo, QueryRequest request) { + + Page<AdminMallAddressInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallAddressInfoVo> adminMallAddressInfoVoIPage = mallSalesmanMapper.selectAddressAmountListInPage(page, mallAddressInfo); + List<AdminMallAddressInfoVo> records = adminMallAddressInfoVoIPage.getRecords(); + if(CollUtil.isNotEmpty(records)){ + for(AdminMallAddressInfoVo adminMallAddressInfoVo : records){ + String province = adminMallAddressInfoVo.getProvince(); + String city = adminMallAddressInfoVo.getCity(); + BigDecimal sumAmount = mallSalesmanMapper.selectSumOrderAmountByProvinceAndCity(province,city); + adminMallAddressInfoVo.setAmount(sumAmount); + Integer orderCnt = mallSalesmanMapper.selectSumOrderCntByProvinceAndCity(province,city); + adminMallAddressInfoVo.setOrderCnt(orderCnt); + } + } + return adminMallAddressInfoVoIPage; + } + + @Override + public List<AdminMallAddressInfoVo> getAddressTree() { + return mallSalesmanMapper.selectProvince(); + } + + @Override + public IPage<AdminSalesmanAchieveVo> getSalesmanAchieveList(MallSalesman mallSalesman, QueryRequest request) { + Page<AdminSalesmanAchieveVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminSalesmanAchieveVo> adminSalesmanAchieveVoIPage = mallSalesmanMapper.selectSalesmanAchieveListInPage(page, mallSalesman); + List<AdminSalesmanAchieveVo> records = adminSalesmanAchieveVoIPage.getRecords(); + if(CollUtil.isNotEmpty(records)){ + for(AdminSalesmanAchieveVo adminSalesmanAchieveVo : records){ + Long salesmanId = adminSalesmanAchieveVo.getSalesmanId(); + List<AdminMemberOrderVo> adminMemberOrderVos = mallSalesmanMapper.selectAdminMemberOrderVoBySalesmanId(salesmanId); + adminSalesmanAchieveVo.setOrderCnt(adminMemberOrderVos.size()); + adminSalesmanAchieveVo.setAdminMemberOrderVos(adminMemberOrderVos); + } + } + return adminSalesmanAchieveVoIPage; + } + + @Override + public List<AdminSalesmanAchieveVo> getSalesmanAchieveTree() { + return mallSalesmanMapper.selectSalesmanAchieveProvince(); + } + + @Override + public IPage<AdminMallAgentRecordVo> getAgentAchieveList(MallAgentRecord mallAgentRecord, QueryRequest request) { + Page<AdminMallAgentRecordVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<AdminMallAgentRecordVo> adminMallAgentRecordVos = mallSalesmanMapper.selectAgentAchieveListInPage(page, mallAgentRecord); + return adminMallAgentRecordVos; + } + + @Override + public List<AdminMallAgentRecordVo> agentAddress() { + List<AdminMallAgentRecordVo> adminMallAgentRecordVos = mallSalesmanMapper.selectAgentAddressProvince(); + if(CollUtil.isNotEmpty(adminMallAgentRecordVos)){ + for(AdminMallAgentRecordVo adminMallAgentRecordVo : adminMallAgentRecordVos){ + String province = adminMallAgentRecordVo.getProvince(); + List<String> cityList = mallSalesmanMapper.selectAgentAddressCity(province); + adminMallAgentRecordVo.setCityList(cityList); + } + } + return adminMallAgentRecordVos; } private String refererIds(String parentId) { @@ -600,4 +935,35 @@ return ids; } + + @Override + public FebsResponse addMemberCoupon(MallMember member) { + MallGoodsCoupon existCoupon = mallGoodsCouponMapper.selectById(member.getCouponId()); + if(existCoupon == null) { + return new FebsResponse().fail().message("优惠券不存在"); + } + + MallMemberCoupon memberCoupon = new MallMemberCoupon(); + memberCoupon.setCouponId(existCoupon.getId()); + memberCoupon.setCouponName(existCoupon.getName()); + memberCoupon.setInviteId(member.getInviteId()); + memberCoupon.setCouponUuid(IdUtil.simpleUUID()); + memberCoupon.setState(1); + memberCoupon.setFromType(4); + memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), existCoupon.getExpireDay())); + memberCoupon.setMemberId(member.getId()); + mallMemberCouponMapper.insert(memberCoupon); + + return new FebsResponse().success().message("操作成功"); + } + + @Override + public FebsResponse checkOrder(Long id) { + + MallMember mallMember = this.baseMapper.selectById(id); + mallMember.setCheckOrder(StateUpDownEnum.DOWN.getCode() == mallMember.getCheckOrder() ? StateUpDownEnum.UP.getCode() : StateUpDownEnum.DOWN.getCode()); + this.baseMapper.updateById(mallMember); + + return new FebsResponse().success().message("操作成功"); + } } -- Gitblit v1.9.1