From 664184af3e070dee665ee736caffa0297804975f Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Tue, 18 Mar 2025 11:46:02 +0800 Subject: [PATCH] perf(mall): 移除会员利润计算中的异步执行 --- src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java | 806 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 696 insertions(+), 110 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 b292b58..e2a4d4a 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 @@ -1,23 +1,32 @@ package cc.mrbird.febs.mall.service.impl; +import cc.mrbird.febs.common.configure.FebsConfigure; 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.MoneyFlowTypeEnum; +import cc.mrbird.febs.common.enumerates.*; import cc.mrbird.febs.common.exception.FebsException; +import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.MallUtils; +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.DateTime; +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; @@ -26,9 +35,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; /** * @author wzy @@ -39,6 +50,8 @@ @RequiredArgsConstructor @Transactional public class AdminMallMemberServiceImpl extends ServiceImpl<MallMemberMapper, MallMember> implements IAdminMallMemberService { + + private final RedisUtils redisUtils; private final MallMemberMapper mallMemberMapper; @@ -53,13 +66,80 @@ private final IApiMallMemberWalletService iApiMallMemberWalletService; private final AppVersionMapper appVersionMapper; + private final MallMemberWithdrawMapper mallMemberWithdrawMapper; private final MallNewsInfoMapper mallNewsInfoMapper; + 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; + private final FebsConfigure febsConfigure; + private final MallChargeMapper mallChargeMapper; @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); + List<MallMember> records = mallMembers.getRecords(); + if(CollUtil.isNotEmpty(records)){ + List<CompletableFuture<Void>> futures = new ArrayList<>(); + DateTime endTime = DateUtil.date(); + records.forEach(item -> { + CompletableFuture<Void> uCompletableFuture = CompletableFuture.runAsync(() -> { + List<MallMember> directMembers = mallMemberMapper.selectList( + new LambdaQueryWrapper<MallMember>() + .eq(MallMember::getReferrerId, item.getInviteId()) + ); + //获取直推 + Set<String> directInviteIds = directMembers.stream() + .map(MallMember::getInviteId) + .collect(Collectors.toSet()); + Set<String> directCntAvailableInviteIds = directMembers.stream() + .filter(member -> !"YOUKE".equals(member.getLevel())) + .map(MallMember::getInviteId) + .collect(Collectors.toSet()); + if(CollUtil.isNotEmpty(directInviteIds)){ + item.setDirectCnt(directInviteIds.size()); + item.setDirectCntAvailable(directCntAvailableInviteIds.size()); + //获取团队 + List<MallMember> allMembers = mallMemberMapper.selectList( + new LambdaQueryWrapper<MallMember>() + .eq(MallMember::getReferrerId, item.getInviteId()) + .or() + .in(MallMember::getReferrerId, directInviteIds) + ); + + + if(CollUtil.isNotEmpty(allMembers)){ + item.setTeamCnt(allMembers.size()); + // 获取团队业绩(不包含本人业绩) + List<MallCharge> mallCharges = mallChargeMapper.selectList( + new LambdaQueryWrapper<MallCharge>() + .in(MallCharge::getMemberId, allMembers.stream().map(MallMember::getId).collect(Collectors.toSet())) + .eq(MallCharge::getState, YesOrNoEnum.YES.getValue()) + .ge(MallCharge::getCreatedTime, item.getDirectorTime()) + .lt(MallCharge::getCreatedTime, endTime) + ); + if (CollUtil.isNotEmpty(mallCharges)) { + item.setAchieveCnt(mallCharges.stream() + .map(MallCharge::getAmount) + .reduce(BigDecimal.ZERO, BigDecimal::add)); + } + } + } + }, febsConfigure.asyncThreadPoolTaskExecutor()); + futures.add(uCompletableFuture); + }); + // 等待所有任务完成 + CompletableFuture<Void> allOf = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); + allOf.join(); // 阻塞直到所有任务完成 + } return mallMembers; } @@ -70,8 +150,19 @@ if(ObjectUtil.isEmpty(mallMember)) { return new FebsResponse().fail().message("会员信息不存在"); } - mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_DISABLED); + mallMember.setAccountStatus(YesOrNoEnum.NO.getValue()); mallMemberMapper.updateById(mallMember); + + String redisKey = AppContants.APP_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.APP_LOGIN_PREFIX + id); + redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id); return new FebsResponse().success(); } @@ -82,14 +173,39 @@ if(ObjectUtil.isEmpty(mallMember)) { return new FebsResponse().fail().message("会员信息不存在"); } - mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); + mallMember.setAccountStatus(YesOrNoEnum.YES.getValue()); mallMemberMapper.updateById(mallMember); return new FebsResponse().success(); } @Override + public void changeIdentity(Integer type, Long id, Integer value) { + MallMember mallMember = mallMemberMapper.selectById(id); + if(mallMember == null) { + throw new FebsException("参数错误"); + } + + if (type == 1) { + mallMember.setDirector(value); + mallMember.setDirectorTime(DateUtil.date()); + } else if (type == 2){ + mallMember.setStoreMaster(value); + } else { + throw new FebsException("参数错误"); + } + + this.baseMapper.updateById(mallMember); + } + + @Override public MallMemberVo getMallMemberInfoById(long id) { MallMemberVo mallMemberVo = mallMemberMapper.getMallMemberInfoById(id); + return mallMemberVo; + } + + @Override + public MallMemberVo getMallMemberWalletById(@NotNull(message = "{required}") long id) { + MallMemberVo mallMemberVo = mallMemberMapper.getMallMemberWalletById(id); return mallMemberVo; } @@ -114,16 +230,37 @@ return adminMoneyChargeListVos; } + private final IXcxPayService iXcxPayService; + @Override @Transactional public FebsResponse chargeAgree(Long id) { - MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectById(id); - if(ObjectUtil.isEmpty(mallMoneyFlow)){ + + MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id); + if(ObjectUtil.isEmpty(mallMemberWithdraw)){ return new FebsResponse().fail().message("系统繁忙,请刷新后重试"); } - if(1 != mallMoneyFlow.getStatus()){ + if(1 != mallMemberWithdraw.getStatus()){ return new FebsResponse().fail().message("当前状态不是提现中"); } + + 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(); @@ -132,13 +269,20 @@ @Override @Transactional public FebsResponse chargeDisagree(Long id) { - MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectById(id); - if(ObjectUtil.isEmpty(mallMoneyFlow)){ + MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id); + if(ObjectUtil.isEmpty(mallMemberWithdraw)){ return new FebsResponse().fail().message("系统繁忙,请刷新后重试"); } - if(1 != mallMoneyFlow.getStatus()){ + if(1 != mallMemberWithdraw.getStatus()){ return new FebsResponse().fail().message("当前状态不是提现中"); } + mallMemberWithdraw.setStatus(3); + 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); mallMoneyFlow.setStatus(3); mallMoneyFlowMapper.updateById(mallMoneyFlow); @@ -150,8 +294,8 @@ @Override public AdminMallMemberPaymentVo getMallMemberPaymentInfoByFlowId(long id) { AdminMallMemberPaymentVo adminMallMemberPaymentVo = new AdminMallMemberPaymentVo(); - MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectById(id); - AdminMallMemberPaymentVo adminMallMemberPaymentVoa = mallMemberPaymentMapper.getMallMemberPaymentInfoByMemberId(mallMoneyFlow.getMemberId()); + MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(id); + AdminMallMemberPaymentVo adminMallMemberPaymentVoa = mallMemberPaymentMapper.getMallMemberPaymentInfoByMemberId(mallMemberWithdraw.getMemberId()); if(ObjectUtil.isNotEmpty(adminMallMemberPaymentVoa)){ adminMallMemberPaymentVo = adminMallMemberPaymentVoa; } @@ -187,17 +331,10 @@ @Override public AdminAgentLevelUpdateInfoVo getAgentLevelUpdateInfoById(long id) { - AdminAgentLevelUpdateInfoVo adminAgentLevelUpdateInfoVo = new AdminAgentLevelUpdateInfoVo(); DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(id); String value = dataDictionaryCustom.getValue(); //{"directIncome":36,"lastCnt":3,"orderCnt":500,"orderType":2,"teamIncome":6,"teamIncomeType":2} - JSONObject jsonObject = JSONObject.parseObject(value); - adminAgentLevelUpdateInfoVo.setDirectIncome(new BigDecimal((jsonObject.get("directIncome")==null?0:jsonObject.get("directIncome")).toString())); - adminAgentLevelUpdateInfoVo.setLastCnt(Integer.parseInt((jsonObject.get("lastCnt")==null?0:jsonObject.get("lastCnt")).toString())); - adminAgentLevelUpdateInfoVo.setOrderCnt(Integer.parseInt((jsonObject.get("orderCnt")==null?0:jsonObject.get("orderCnt")).toString())); - adminAgentLevelUpdateInfoVo.setOrderType(Integer.parseInt(jsonObject.get("orderType").toString())); - adminAgentLevelUpdateInfoVo.setTeamIncome(new BigDecimal((jsonObject.get("teamIncome")==null?0:jsonObject.get("teamIncome")).toString())); - adminAgentLevelUpdateInfoVo.setTeamIncomeType(Integer.parseInt(jsonObject.get("orderType").toString())); + AdminAgentLevelUpdateInfoVo adminAgentLevelUpdateInfoVo = JSONObject.parseObject(value, AdminAgentLevelUpdateInfoVo.class); adminAgentLevelUpdateInfoVo.setId(id); return adminAgentLevelUpdateInfoVo; } @@ -205,15 +342,9 @@ @Override public FebsResponse agentLevelUpdate(AgentLevelUpdateDto agentLevelUpdateDto) { DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(agentLevelUpdateDto.getId()); - AgentLevelUpdateDto agentLevelUpdateDtoJson = new AgentLevelUpdateDto(); - agentLevelUpdateDtoJson.setDirectIncome(agentLevelUpdateDto.getDirectIncome()); - agentLevelUpdateDtoJson.setLastCnt(agentLevelUpdateDto.getLastCnt()); - agentLevelUpdateDtoJson.setOrderCnt(agentLevelUpdateDto.getOrderCnt()); - agentLevelUpdateDtoJson.setTeamIncome(agentLevelUpdateDto.getTeamIncome()); - agentLevelUpdateDtoJson.setOrderType(agentLevelUpdateDto.getOrderType()); - agentLevelUpdateDtoJson.setTeamIncomeType(agentLevelUpdateDto.getTeamIncomeType()); - JSONObject jsonObject = (JSONObject)JSONObject.toJSON(agentLevelUpdateDtoJson); - dataDictionaryCustom.setValue(jsonObject.toString()); + + agentLevelUpdateDto.setId(null); + dataDictionaryCustom.setValue(JSONObject.toJSONString(agentLevelUpdateDto)); dataDictionaryCustomMapper.updateById(dataDictionaryCustom); return new FebsResponse().success(); } @@ -221,6 +352,115 @@ @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 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.APP_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.APP_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 @@ -318,73 +558,6 @@ } @Override - public MallNewsInfo getNewsInfoById(long id) { - return mallNewsInfoMapper.selectById(id); - } - - @Override - public IPage<AdminMallNewsInfoVo> getNewInfoList(MallNewsInfo mallNewsInfo, QueryRequest request) { - Page<AdminMallNewsInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize()); - IPage<AdminMallNewsInfoVo> adminMallNewsInfoVos = mallNewsInfoMapper.getNewInfoListInPage(page, mallNewsInfo); - return adminMallNewsInfoVos; - } - - @Override - public FebsResponse addNewsInfo(MallNewsInfoDto mallNewsInfoDto) { - Integer type = mallNewsInfoDto.getType(); - if(type == 2){ - Long goodsId = mallNewsInfoDto.getGoodsId()==null?0L:mallNewsInfoDto.getGoodsId(); - if(goodsId == 0L){ - return new FebsResponse().fail().message("请选择跳转的产品"); - } - } - MallNewsInfo mallNewsInfo = new MallNewsInfo(); - mallNewsInfo.setTitle(mallNewsInfoDto.getTitle()); - mallNewsInfo.setContent(mallNewsInfoDto.getContent()); - mallNewsInfo.setType(mallNewsInfoDto.getType()); - if(mallNewsInfoDto.getType() == 2){ - mallNewsInfo.setTargetId(mallNewsInfoDto.getGoodsId()); - } - mallNewsInfoMapper.insert(mallNewsInfo); - return new FebsResponse().success(); - } - - @Override - public FebsResponse delNewsInfo(Long id) { - MallNewsInfo mallNewsInfo = mallNewsInfoMapper.selectById(id); - if(ObjectUtil.isEmpty(mallNewsInfo)){ - return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); - } - mallNewsInfoMapper.deleteById(id); - return new FebsResponse().success(); - } - - @Override - public FebsResponse updateNewsInfo(MallNewsInfoDto mallNewsInfoDto) { - MallNewsInfo mallNewsInfoBefore = mallNewsInfoMapper.selectById(mallNewsInfoDto.getId()); - if(ObjectUtil.isEmpty(mallNewsInfoBefore)){ - return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); - } - Integer type = mallNewsInfoDto.getType(); - if(type == 2){ - Long goodsId = mallNewsInfoDto.getGoodsId()==null?0L:mallNewsInfoDto.getGoodsId(); - if(goodsId == 0L){ - return new FebsResponse().fail().message("请选择跳转的产品"); - } - } - MallNewsInfo mallNewsInfo = new MallNewsInfo(); - mallNewsInfo.setTitle(mallNewsInfoDto.getTitle()); - mallNewsInfo.setContent(mallNewsInfoDto.getContent()); - mallNewsInfo.setType(mallNewsInfoDto.getType()); - if(mallNewsInfoDto.getType() == 2){ - mallNewsInfo.setTargetId(mallNewsInfoDto.getGoodsId()); - } - mallNewsInfoMapper.insert(mallNewsInfo); - mallNewsInfoMapper.deleteById(mallNewsInfoDto.getId()); - return new FebsResponse().success(); - } - - @Override @Transactional public FebsResponse updateSystemPay(MallSystemPayDto mallSystemPayDto) { Long memberId = mallSystemPayDto.getId(); @@ -394,21 +567,52 @@ } BigDecimal bigDecimal = mallSystemPayDto.getAddBalance(); + boolean isReduce = false; if(bigDecimal.compareTo(BigDecimal.ZERO) <= 0){ - return new FebsResponse().fail().message("拨付数目需要大于0"); + isReduce = true; } - MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); - mallMemberWallet.setBalance(mallMemberWallet.getBalance().add(bigDecimal)); - mallMemberWalletMapper.updateBalanceWithId(mallMemberWallet); + Integer type = mallSystemPayDto.getType(); + Integer flowType = 0; + Integer moneyType = 0; + String moneyTypeDec = ""; + String filedType = ""; + if (type == 1) { + filedType = "balance"; + flowType = FlowTypeEnum.BALANCE.getValue(); + moneyType = RunVipMoneyFlowTypeEnum.SYS_BALANCE.getValue(); + moneyTypeDec = RunVipMoneyFlowTypeEnum.SYS_BALANCE.getDescription(); + } else if (type == 2) { + filedType = "score"; + flowType = FlowTypeEnum.SCORE.getValue(); + moneyType = RunVipMoneyFlowTypeEnum.SYS_SCORE.getValue(); + moneyTypeDec = RunVipMoneyFlowTypeEnum.SYS_SCORE.getDescription(); + } else if (type == 3) { + filedType = "prizeScore"; + } else { + throw new FebsException("操作失败"); + } - MallMoneyFlow flow = new MallMoneyFlow(); - flow.setMemberId(memberId); - flow.setAmount(bigDecimal); - flow.setType(MoneyFlowTypeEnum.SYSTEM_PAY.getValue()); - flow.setOrderNo("SYS"+MallUtils.getOrderNum()); - flow.setStatus(2); - mallMoneyFlowMapper.insert(flow); + if (isReduce) { + int i = iApiMallMemberWalletService.reduce(mallSystemPayDto.getAddBalance().negate(), mallSystemPayDto.getId(), filedType); + + if (i == 2) { + throw new FebsException("操作失败"); + } + } else { + iApiMallMemberWalletService.add(mallSystemPayDto.getAddBalance(), mallSystemPayDto.getId(), filedType); + } + String orderNo = MallUtils.getOrderNum("SYS"); + mallMoneyFlowService.runVipMoneyFlowAdd( + mallMember.getId(), + mallMember.getId(), + orderNo, + flowType, + moneyType, + bigDecimal, + StrUtil.format(moneyTypeDec,bigDecimal), + YesOrNoEnum.YES.getValue() + ); return new FebsResponse().success(); } @@ -442,4 +646,386 @@ this.baseMapper.updateById(mallMember); return new FebsResponse().success().message("重置成功"); } + + @Override + public void resetPwd(String ids, Integer type) { + if (StrUtil.isEmpty(ids)) { + throw new FebsException("参数错误"); + } + List<String> idList = StrUtil.split(ids, ','); + + for (String s : idList) { + Long id = Long.parseLong(s); + MallMember member = new MallMember(); + member.setId(id); + member.setCreatedTime(null); + + // 重置交易密码 + if (type == 1) { + String payPwd = SecureUtil.md5("123456"); + member.setTradePassword(payPwd); + // 重置登录密码 + } else { + String pwd = SecureUtil.md5("a123456"); + member.setPassword(pwd); + } + this.baseMapper.updateById(member); + } + } + + @Override + public IPage<MallDataVo> getMallDataList(MallMember mallMember, QueryRequest request) { + Page<MallDataVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<MallDataVo> mallDataVos = this.baseMapper.getMallDataListInPage(page, mallMember); + return mallDataVos; + } + + @Override + public IPage<MallShopApply> findShopApplyListInPage(MallShopApply mallShopApply, QueryRequest request) { + Page<MallShopApply> page = new Page<>(request.getPageNum(), request.getPageSize()); + + return mallShopApplyMapper.selectShopApplyInPage(mallShopApply, page); + } + + @Override + public MallShopApply findShopApplyById(Long id) { + return mallShopApplyMapper.selectById(id); + } + + @Override + public void applyCheckAgree(Long id) { + MallShopApply apply = mallShopApplyMapper.selectById(id); + if (!MallShopApply.APPLY_ING.equals(apply.getStatus())) { + throw new FebsException("申请已审核, 请勿重复操作"); + } + + MallMember member = mallMemberMapper.selectById(apply.getMemberId()); + member.setStoreMaster(1); + mallMemberMapper.updateById(member); + + apply.setStatus(MallShopApply.APPLY_AGREE); + mallShopApplyMapper.updateById(apply); + } + + @Override + public void applyCheckDisAgree(Long id) { + MallShopApply apply = mallShopApplyMapper.selectById(id); + if (!MallShopApply.APPLY_ING.equals(apply.getStatus())) { + throw new FebsException("申请已审核, 请勿重复操作"); + } + + apply.setStatus(MallShopApply.APPLY_DISAGREE); + mallShopApplyMapper.updateById(apply); + } + + @Override + @Transactional + public FebsResponse updateMemberInfo(MallUpdateMemberInfoDto mallUpdateMemberInfoDto) { + Long memberId = mallUpdateMemberInfoDto.getId(); + MallMember mallMember = mallMemberMapper.selectById(memberId); + if(ObjectUtil.isEmpty(mallMember)){ + return new FebsResponse().fail().message("系统繁忙,请刷新页面重试"); + } + String phone = mallUpdateMemberInfoDto.getPhone(); + if(StrUtil.isEmpty(phone)){ + throw new FebsException("请输入手机号码"); + } + if(!phone.equals(mallMember.getPhone())){ + QueryWrapper<MallMember> objectQueryWrapper = new QueryWrapper<>(); + objectQueryWrapper.eq("phone",phone); + List<MallMember> mallMembers = this.baseMapper.selectList(objectQueryWrapper); + if(CollUtil.isNotEmpty(mallMembers)){ + throw new FebsException("手机号码已绑定过账号"); + } + } + mallMember.setPhone(phone); + mallMember.setBindPhone(phone); + mallMember.setLevel(mallUpdateMemberInfoDto.getLevelCode()); + mallMemberMapper.updateById(mallMember); + if(mallUpdateMemberInfoDto.getBalance() == null){ + throw new FebsException("请输入正确的余额"); + } + if(mallUpdateMemberInfoDto.getScore() == null){ + throw new FebsException("请输入正确的赠送积分"); + } + if(mallUpdateMemberInfoDto.getPrizeScore() == null){ + throw new FebsException("请输入正确的竞猜积分"); + } + BigDecimal balance = mallUpdateMemberInfoDto.getBalance(); + if(BigDecimal.ZERO.compareTo(balance) > 0){ + throw new FebsException("请输入正确的余额"); + } + BigDecimal score = mallUpdateMemberInfoDto.getScore(); + if(BigDecimal.ZERO.compareTo(score) > 0){ + throw new FebsException("请输入正确的赠送积分"); + } + BigDecimal prizeScore = mallUpdateMemberInfoDto.getPrizeScore(); + if(BigDecimal.ZERO.compareTo(prizeScore) > 0){ + throw new FebsException("请输入正确的竞猜积分"); + } + MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); + mallMemberWallet.setBalance(balance); + mallMemberWallet.setScore(score); + mallMemberWallet.setPrizeScore(prizeScore); + mallMemberWalletMapper.updateById(mallMemberWallet); + return new FebsResponse().success(); + } + + @Override + public MallMember findByInviteId(String inviteId) { + + return this.baseMapper.selectInfoByInviteId(inviteId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void modifyReferer(MallMember member) { + 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("推荐人不存在"); + } + member = this.baseMapper.selectById(member.getId());//修改的用户 + + 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); + + List<MallMember> childs = this.baseMapper.selectByRefererId(member.getInviteId()); + if (CollUtil.isEmpty(childs)) { + return; + } + + for (MallMember child : childs) { + 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) { + boolean flag = false; + 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; + } + } + + 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("操作成功"); + } } -- Gitblit v1.9.1