From e90dc8cdf7d4ce7d08e1ab51fcde3c28fd2995a0 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 20 Dec 2022 16:30:35 +0800 Subject: [PATCH] 20221220 1、星级市场 --- src/main/java/cc/mrbird/febs/mall/dto/ApiBuyMemberStarDto.java | 21 ++++ src/main/java/cc/mrbird/febs/mall/vo/ApiMallMemberStarVo.java | 25 +++++ src/main/java/cc/mrbird/febs/mall/mapper/MallMemberStarBuyMapper.java | 7 + src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java | 2 src/main/resources/mapper/modules/MallMemberStarBuyMapper.xml | 5 + src/main/resources/mapper/modules/MallMemberMapper.xml | 8 + src/main/java/cc/mrbird/febs/mall/entity/MallMemberStarBuy.java | 31 ++++++ src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java | 9 + src/main/java/cc/mrbird/febs/common/enumerates/MallMoneyFlowTypeEnum.java | 1 src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 113 +++++++++++++++++++++ src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java | 5 src/main/java/cc/mrbird/febs/common/enumerates/MemberAgentLevelEnum.java | 2 src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java | 16 +++ src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java | 1 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java | 9 + src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java | 2 16 files changed, 247 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java index d363f3b..f03c050 100644 --- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java +++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java @@ -28,6 +28,8 @@ registration.excludePathPatterns("/api/unipay/unipayCallBack"); registration.excludePathPatterns("/api/unipay/agreeMentPayCallBack"); registration.excludePathPatterns("/api/unipay/singlePayCallBack"); + //星级市场 + registration.excludePathPatterns("/api/member/memberStarMarket"); } @Override diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java index cf1ddf1..349537c 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java @@ -7,6 +7,15 @@ public enum DataDictionaryEnum { /** + * 会员星级市场 + * value:升级成为对应的星级需要的价格 + * description:升级成为对应的星级名称 + */ + ONE_STAR("SYSTEM_STAR","ONE_STAR"), + TWO_STAR("SYSTEM_STAR","TWO_STAR"), + THREE_STAR("SYSTEM_STAR","THREE_STAR"), + + /** * 代理等级 * value : {"levelSelf":"一星","directLevelCnt":"3","teamLevelCnt":"5","minTeamLevelCnt":"2","ManageSubsidyPercent":"2"} * levelSelf:自身星级 diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MallMoneyFlowTypeEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MallMoneyFlowTypeEnum.java index 7a65496..ac39335 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/MallMoneyFlowTypeEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/MallMoneyFlowTypeEnum.java @@ -5,6 +5,7 @@ @Getter public enum MallMoneyFlowTypeEnum { + BUY_MARKET_STAR("购买星级",7), TEAM_REWARD("团队管理补贴",6), PAY("支付",5), SHARE_REWARD_TWO("第二代分享奖励",4), diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/MemberAgentLevelEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/MemberAgentLevelEnum.java index e1065d7..4d1daf8 100644 --- a/src/main/java/cc/mrbird/febs/common/enumerates/MemberAgentLevelEnum.java +++ b/src/main/java/cc/mrbird/febs/common/enumerates/MemberAgentLevelEnum.java @@ -9,7 +9,7 @@ AGENT_THREE("市代","AGENT_THREE",3),//市代 AGENT_TWO("县代","AGENT_TWO",2),//县代 AGENT_ONE("区代","AGENT_ONE",1),//区代 - AGENT("会员","AGENT",0);//会员 + AGENT("代理","AGENT",0);//会员 private String name; private String code; diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java index 3ffb084..26757bb 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java @@ -215,4 +215,20 @@ return memberService.delMemberBank(id); } + @ApiOperation(value = "星级市场", notes = "星级市场") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiMallMemberStarVo.class) + }) + @GetMapping(value = "/memberStarMarket") + public FebsResponse memberStarMarket() { + return new FebsResponse().success().data(memberService.getMemberStarMarketList()); + } + + @ApiOperation(value = "购买星级") + @PostMapping(value = "/buyMemberStar") + public FebsResponse buyMemberStar(@RequestBody @Validated ApiBuyMemberStarDto apiBuyMemberStarDto) { + return memberService.buyMemberStar(apiBuyMemberStarDto); + } + + } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiBuyMemberStarDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiBuyMemberStarDto.java new file mode 100644 index 0000000..6e3446a --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiBuyMemberStarDto.java @@ -0,0 +1,21 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +@ApiModel(value = "ApiBuyMemberStarDto", description = "参数接收类") +public class ApiBuyMemberStarDto { + + @NotBlank(message = "请选择想要购买的星级") + @ApiModelProperty(value = "编码") + private String code; + + @NotBlank(message = "请输入资金密码") + @ApiModelProperty(value = "资金密码") + private String tradePassword; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMemberStarBuy.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberStarBuy.java new file mode 100644 index 0000000..5915170 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMemberStarBuy.java @@ -0,0 +1,31 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 用户升级会员等级表 + */ +@Data +@TableName("mall_member_star_buy") +public class MallMemberStarBuy extends BaseEntity { + + //会员ID + private Long memberId; + //编码 + private String buyCode; + //购买金额 + private BigDecimal amount; + //购买的等级名称 + private String starName; + //购买金额 + private String starCode; + //剩余金额 + private BigDecimal avaAmount; + //状态 1-生效中 2-已结束 + private Integer status; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java index 7840717..1cfd489 100644 --- a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberMapper.java @@ -95,4 +95,6 @@ void updateLevelById(@Param("level")String name, @Param("id")Long id); Integer selectByReferersIdAndLevel(@Param("inviteId")String inviteId, @Param("level")String minLevel); + + void updateAccountLevelById(@Param("accountLevel")String accountLevel, @Param("id")Long id); } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberStarBuyMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberStarBuyMapper.java new file mode 100644 index 0000000..83e0996 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallMemberStarBuyMapper.java @@ -0,0 +1,7 @@ +package cc.mrbird.febs.mall.mapper; + +import cc.mrbird.febs.mall.entity.MallMemberStarBuy; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface MallMemberStarBuyMapper extends BaseMapper<MallMemberStarBuy> { +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java index d9653e6..b22ab6b 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java @@ -5,10 +5,7 @@ import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.entity.MallMemberPayment; import cc.mrbird.febs.mall.entity.MallShopApply; -import cc.mrbird.febs.mall.vo.CashOutSettingVo; -import cc.mrbird.febs.mall.vo.MyCommissionVo; -import cc.mrbird.febs.mall.vo.MyTeamVo; -import cc.mrbird.febs.mall.vo.ShopListVo; +import cc.mrbird.febs.mall.vo.*; import com.baomidou.mybatisplus.extension.service.IService; import java.math.BigDecimal; @@ -74,4 +71,8 @@ FebsResponse updateMemberBank(UpdateMemberBankDto updateMemberBankDto); FebsResponse delMemberBank(Long id); + + List<ApiMallMemberStarVo> getMemberStarMarketList(); + + FebsResponse buyMemberStar(ApiBuyMemberStarDto apiBuyMemberStarDto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java index 10a8612..47fb7d3 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AgentServiceImpl.java @@ -160,6 +160,7 @@ } @Override + @Transactional public void directReward(Long directRewardId) { log.info("消费补贴奖励、直推返利、分享奖励直推上级、分享奖励直推上级的直推、团队管理补贴消息,ID:{}", directRewardId); //获取订单信息 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 8b6aae4..0817960 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 @@ -14,6 +14,7 @@ import cc.mrbird.febs.mall.service.IApiMallMemberService; import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; import cc.mrbird.febs.mall.service.ICommonService; +import cc.mrbird.febs.mall.service.IMallMoneyFlowService; import cc.mrbird.febs.mall.vo.*; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; @@ -23,6 +24,7 @@ import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -58,6 +60,9 @@ private final MallShopApplyMapper mallShopApplyMapper; private final MallRegisterAppealMapper mallRegisterAppealMapper; private final MallMemberBankMapper mallMemberBankMapper; + private final IApiMallMemberWalletService memberWalletService; + private final MallMemberStarBuyMapper mallMemberStarBuyMapper; + private final IMallMoneyFlowService mallMoneyFlowService; @Value("${spring.profiles.active}") @@ -111,7 +116,9 @@ mallMember.setName(registerDto.getName()); mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE); mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL); + //会员等级 mallMember.setAccountLevel(MemberAccountLevelEnum.NORMAL.getName()); + //代理等级 mallMember.setLevel(MemberAgentLevelEnum.AGENT.getName()); mallMember.setSex("男"); mallMember.setBindPhone(registerDto.getAccount()); @@ -239,10 +246,10 @@ mallMemberVo.setHasPayment(1); } - DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); - if (dic != null) { - mallMemberVo.setLevelName(dic.getDescription()); - } +// DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(AppContants.AGENT_LEVEL, mallMember.getLevel()); +// if (dic != null) { +// mallMemberVo.setLevelName(dic.getDescription()); +// } MallMemberWallet wallet = mallMemberWalletMapper.selectWalletByMemberId(mallMemberVo.getId()); mallMemberVo.setBalance(wallet.getBalance()); mallMemberVo.setScore(wallet.getScore()); @@ -590,4 +597,102 @@ mallMemberBankMapper.deleteById(id); return new FebsResponse().success(); } + + @Override + public List<ApiMallMemberStarVo> getMemberStarMarketList() { + List<ApiMallMemberStarVo> apiMallMemberStarVos = new ArrayList<>(); + List<DataDictionaryCustom> memberStarMarketDicList = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.ONE_STAR.getType()); + if(CollUtil.isNotEmpty(memberStarMarketDicList)){ + for(DataDictionaryCustom memberStarMarketDic : memberStarMarketDicList){ + ApiMallMemberStarVo apiMallMemberStarVo = new ApiMallMemberStarVo(); + apiMallMemberStarVo.setName(memberStarMarketDic.getDescription()); + apiMallMemberStarVo.setCode(memberStarMarketDic.getCode()); + String value = memberStarMarketDic.getValue(); + cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(value); + String price = jsonObject.get("price").toString(); + String status = jsonObject.get("status").toString(); + apiMallMemberStarVo.setPrice(new BigDecimal(price).setScale(BigDecimal.ROUND_DOWN,2)); + apiMallMemberStarVo.setStatus(Integer.parseInt(status)); + apiMallMemberStarVos.add(apiMallMemberStarVo); + } + } + return apiMallMemberStarVos; + } + + @Override + @Transactional + public FebsResponse buyMemberStar(ApiBuyMemberStarDto apiBuyMemberStarDto) { + MallMember member = LoginUserUtil.getLoginUser(); + /** + * 判断用户当前的星级 + */ + MallMember mallMember = this.baseMapper.selectById(member.getId()); + //用户当前的星级 + String accountLevel = mallMember.getAccountLevel(); + Integer memberLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(accountLevel); + //星级市场的星级参数 + String buyStarCode = apiBuyMemberStarDto.getCode(); + DataDictionaryCustom buyStarCodeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( + DataDictionaryEnum.ONE_STAR.getType(), + buyStarCode + ); + if(ObjectUtil.isEmpty(buyStarCodeDic)){ + throw new FebsException("请选择正确的星级"); + } + String buyStarValue = buyStarCodeDic.getValue(); + cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(buyStarValue); + String buyStarPrice = jsonObject.get("price").toString(); + String buyStarStatus = jsonObject.get("status").toString(); + if(1 != Integer.parseInt(buyStarStatus)){ + throw new FebsException("当前未开放购买"); + } + + String buyStarDescription = buyStarCodeDic.getDescription(); + Integer buyStarLevelCode = MemberAccountLevelEnum.NORMAL.getMemberLevelCode(buyStarDescription); + //判断用户星级和购买星级关系,无法购买当前用户已拥有及其以下的星级 + if(memberLevelCode >= buyStarLevelCode){ + throw new FebsException("请不要重复购买"); + } + //支付 + String tradePassword = apiBuyMemberStarDto.getTradePassword(); + if (StrUtil.isBlank(tradePassword)) { + throw new FebsException("支付密码错误"); + } + if (StrUtil.isBlank(mallMember.getTradePassword())) { + throw new FebsException("未设置支付密码"); + } + if (!SecureUtil.md5(tradePassword).equals(mallMember.getTradePassword())) { + throw new FebsException("支付密码错误"); + } + BigDecimal buyStarPriceBigDecimal = new BigDecimal(buyStarPrice).setScale(BigDecimal.ROUND_DOWN, 2); + int reduce = memberWalletService.reduce(buyStarPriceBigDecimal, mallMember.getId(), "balance"); + if (reduce == 2) { + throw new FebsException("余额不足"); + } + //产生用户升级会员等级记录 + MallMemberStarBuy mallMemberStarBuy = new MallMemberStarBuy(); + mallMemberStarBuy.setMemberId(mallMember.getId()); + mallMemberStarBuy.setBuyCode(MallUtils.getLogisticsNum("s")); + mallMemberStarBuy.setStarName(buyStarDescription); + mallMemberStarBuy.setStarCode(buyStarCode); + mallMemberStarBuy.setAmount(buyStarPriceBigDecimal); + mallMemberStarBuy.setAvaAmount(buyStarPriceBigDecimal); + mallMemberStarBuy.setStatus(1); + mallMemberStarBuyMapper.insert(mallMemberStarBuy); + //产生支付流水 + Long subsidyAmountFlowId = mallMoneyFlowService.addMoneyFlow( + mallMember.getId(), + mallMemberStarBuy.getBuyCode(), + buyStarPriceBigDecimal.negate(), + MallMoneyFlowTypeEnum.BUY_MARKET_STAR.getCode(), + MallMoneyFlow.STATUS_SUCCESS, + MallMoneyFlow.IS_RETURN_Y, + mallMember.getId(), + FlowTypeEnum.BALANCE.getValue(), + MallMoneyFlowTypeEnum.BUY_MARKET_STAR.getName() + ); + //更新会员星级 + this.baseMapper.updateAccountLevelById(buyStarDescription,mallMember.getId()); + return new FebsResponse().success(); + } } diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiMallMemberStarVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallMemberStarVo.java new file mode 100644 index 0000000..4b2526e --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiMallMemberStarVo.java @@ -0,0 +1,25 @@ +package cc.mrbird.febs.mall.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@ApiModel(value = "ApiMallMemberStarVo", description = "返回参数类") +public class ApiMallMemberStarVo { + + @ApiModelProperty(value = "名称") + private String name; + + @ApiModelProperty(value = "编码") + private String code; + + @ApiModelProperty(value = "价格") + private BigDecimal price; + + @ApiModelProperty(value = "状态 1-可购买(开放) 2-未开放") + private Integer status; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java index 1080ba8..fab4137 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java @@ -36,12 +36,15 @@ @ApiModelProperty(value = "余额") private BigDecimal balance; - @ApiModelProperty(value = "代理等级") private String levelName; + + @ApiModelProperty(value = "会员星级") + private String accountLevel; @ApiModelProperty(value = "推荐人昵称") private String referrerName; + @ApiModelProperty(value = "代理等级") private String level; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") diff --git a/src/main/resources/mapper/modules/MallMemberMapper.xml b/src/main/resources/mapper/modules/MallMemberMapper.xml index 97e4d64..ded7d1b 100644 --- a/src/main/resources/mapper/modules/MallMemberMapper.xml +++ b/src/main/resources/mapper/modules/MallMemberMapper.xml @@ -431,4 +431,12 @@ where level = #{level} and FIND_IN_SET(#{inviteId}, referrer_ids) </select> + + <update id="updateAccountLevelById"> + update mall_member + set + account_level = #{accountLevel} + where + id = #{id} + </update> </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MallMemberStarBuyMapper.xml b/src/main/resources/mapper/modules/MallMemberStarBuyMapper.xml new file mode 100644 index 0000000..ec6c6ba --- /dev/null +++ b/src/main/resources/mapper/modules/MallMemberStarBuyMapper.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cc.mrbird.febs.mall.mapper.MallMemberStarBuyMapper"> + +</mapper> \ No newline at end of file -- Gitblit v1.9.1