src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java
@@ -36,4 +36,7 @@ @ApiModelProperty("未消费产生的下降值") private int downgradeValue; @ApiModelProperty("成长值规则") private String growthRule; } src/main/java/com/mzl/flower/dto/request/menber/MemberGrowthRecordDTO.java
对比新文件 @@ -0,0 +1,34 @@ package com.mzl.flower.dto.request.menber; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigInteger; import java.util.Date; @Data public class MemberGrowthRecordDTO { @ApiModelProperty(value = "会员成长记录表ID") private Long id; @ApiModelProperty("记录日期") private Date recordDate; @ApiModelProperty("成长值") private int growth; @ApiModelProperty("用户id") private String userId; @ApiModelProperty("商户ID") private BigInteger customerId; @ApiModelProperty("成长值来源(growth_source:签到、消费)") private String source; @ApiModelProperty("新增、扣除(growth_type)") private String type; @ApiModelProperty("备注") private String remarks; } src/main/java/com/mzl/flower/dto/request/menber/MemberRecordQueryDTO.java
对比新文件 @@ -0,0 +1,18 @@ package com.mzl.flower.dto.request.menber; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @Data public class MemberRecordQueryDTO { @ApiModelProperty(value = "新增、扣除(growth_type)") private String type; @ApiModelProperty(value = "成长值来源(growth_source:签到、消费)") private String source; @ApiModelProperty(value = "记录开始日期") private Date startRecordDate; @ApiModelProperty(value = "记录结束日期") private Date endRecordDate; } src/main/java/com/mzl/flower/dto/request/menber/TargetMemberDTO.java
对比新文件 @@ -0,0 +1,23 @@ package com.mzl.flower.dto.request.menber; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class TargetMemberDTO { @ApiModelProperty(value = "目标会员等级") private String targetMemberLevel; @ApiModelProperty("目标会员等级要求成长值") private int targetStartPoint; @ApiModelProperty("达到目标所需成长值") private int targetGap; @ApiModelProperty("目标会员等级优惠金额") private BigDecimal targetDiscountAmount; } src/main/java/com/mzl/flower/dto/request/menber/UserGrowthRecordDTO.java
对比新文件 @@ -0,0 +1,18 @@ package com.mzl.flower.dto.request.menber; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class UserGrowthRecordDTO { @ApiModelProperty(value = "当前会员等级") private String currentMemberLevel; @ApiModelProperty("当前成长值") private int currentGrowthValue; List<TargetMemberDTO> targetMemberInfos; } src/main/java/com/mzl/flower/entity/menber/Member.java
@@ -44,4 +44,7 @@ @ApiModelProperty("未消费产生的下降值") private int downgradeValue; @ApiModelProperty("成长值规则") private String growthRule; } src/main/java/com/mzl/flower/entity/menber/MemberGrowthRecord.java
对比新文件 @@ -0,0 +1,42 @@ package com.mzl.flower.entity.menber; import com.baomidou.mybatisplus.annotation.TableName; import com.mzl.flower.base.BaseAutoEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigInteger; import java.util.Date; /** * @author fanghaowei * @version version2.0 * @className Member * @date 2024/8/27 * @description 会员成长记录表ID */ @Data @TableName("t_member_growth_record") public class MemberGrowthRecord extends BaseAutoEntity { @ApiModelProperty("记录日期") private Date recordDate; @ApiModelProperty("成长值") private int growth; @ApiModelProperty("用户id") private String userId; @ApiModelProperty("商户ID") private BigInteger customerId; @ApiModelProperty("成长值来源(growth_source:签到、消费)") private String source; @ApiModelProperty("新增、扣除(growth_type)") private String type; @ApiModelProperty("备注") private String remarks; } src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java
对比新文件 @@ -0,0 +1,25 @@ package com.mzl.flower.mapper.member; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.menber.MemberGrowthRecord; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; /** * @author fanghaowei * @version version2.0 * @className MemberMapper * @date 2024/8/27 * @description 会员成记录mapper */ @SuppressWarnings("ALL") @Repository public interface MemberGrowthRecordMapper extends BaseMapper<MemberGrowthRecord> { @Select("SELECT CASE WHEN SUM(growth) < 0 THEN 0 ELSE SUM(growth) END as total_growth from t_member_growth_record WHERE user_id = #{userId} and deleted = '0'") Integer getSumGrowthByUsertId(@Param("userId") String userId); } src/main/java/com/mzl/flower/mapper/member/MemberMapper.java
@@ -6,6 +6,8 @@ import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; import java.util.List; /** * @author fanghaowei @@ -21,4 +23,11 @@ @Select("select * from t_member where name = #{name} and deleted = '0' limit 1") Member getMemberByName(@Param("name") String name); @Select("select * from t_member where start_point <= #{growthValue} and end_point > #{growthValue} and deleted = '0' limit 1") Member getMemberByGrowthValue(@Param("growthValue") Integer growthValue); //获取成长值大于当前值的会员 @Select("select * from t_member where start_point > #{growthValue} and deleted = '0' ") List<Member> getgtMembersByGrowthValue(@Param("growthValue") Integer growthValue); } src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java
对比新文件 @@ -0,0 +1,16 @@ package com.mzl.flower.service.menber; import com.baomidou.mybatisplus.extension.service.IService; import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO; import com.mzl.flower.dto.request.menber.UserGrowthRecordDTO; import com.mzl.flower.entity.menber.MemberGrowthRecord; public interface MemberGrowthRecordService extends IService<MemberGrowthRecord> { void saveMemberGrowthRecord(MemberGrowthRecord memberGrowthRecord); void updateMemberGrowthRecord(MemberGrowthRecordDTO memberGrowthRecordDTO); void deleteMemberGrowthRecord(String id); UserGrowthRecordDTO getInfoByUserId(String userId); } src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
对比新文件 @@ -0,0 +1,90 @@ package com.mzl.flower.service.menber.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO; import com.mzl.flower.dto.request.menber.TargetMemberDTO; import com.mzl.flower.dto.request.menber.UserGrowthRecordDTO; import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.menber.MemberGrowthRecord; import com.mzl.flower.mapper.member.MemberGrowthRecordMapper; import com.mzl.flower.mapper.member.MemberMapper; import com.mzl.flower.service.menber.MemberGrowthRecordService; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author fanghaowei * @version version2.0 * @className MemberGrowthRecordServiceImpl * @date 2024/8/26 * @description 会员记录功能逻辑层 */ @Service @RequiredArgsConstructor public class MemberGrowthRecordServiceImpl extends ServiceImpl<MemberGrowthRecordMapper, MemberGrowthRecord> implements MemberGrowthRecordService { private final MemberGrowthRecordMapper memberGrowthRecordMapper; private final MemberMapper memberMapper; @Override public void saveMemberGrowthRecord(MemberGrowthRecord memberGrowthRecord) { memberGrowthRecord.setRecordDate(new Date()); memberGrowthRecordMapper.insert(memberGrowthRecord); } @Override public void updateMemberGrowthRecord(MemberGrowthRecordDTO memberGrowthRecordDTO) { MemberGrowthRecord memberGrowthRecord = memberGrowthRecordMapper.selectById(memberGrowthRecordDTO.getId()); if (memberGrowthRecord == null) { throw new ValidationException("成长记录信息不存在"); } BeanUtils.copyProperties(memberGrowthRecordDTO, memberGrowthRecord); memberGrowthRecord.update(SecurityUtils.getUserId()); memberGrowthRecordMapper.updateById(memberGrowthRecord); } @Override public void deleteMemberGrowthRecord(String id) { MemberGrowthRecord memberGrowthRecord = memberGrowthRecordMapper.selectById(id); if (memberGrowthRecord == null) { throw new ValidationException("成长记录信息不存在"); } memberGrowthRecordMapper.deleteById(id); } @Override public UserGrowthRecordDTO getInfoByUserId(String userId) { UserGrowthRecordDTO userGrowthRecordDTO = new UserGrowthRecordDTO(); List<TargetMemberDTO> targetMemberDTOList = new ArrayList<>(); //查询当前人员的成长值 最少是0 Integer sumGrowth = memberGrowthRecordMapper.getSumGrowthByUsertId(userId); userGrowthRecordDTO.setCurrentGrowthValue(sumGrowth); //查询当前会员等级 Member member = memberMapper.getMemberByGrowthValue(sumGrowth); userGrowthRecordDTO.setCurrentMemberLevel(member.getName()); //查询比当前等级高的会员等级信息 List<Member> memberList = memberMapper.getgtMembersByGrowthValue(sumGrowth); if (!CollectionUtils.isEmpty(memberList)) { memberList.forEach(m -> { TargetMemberDTO targetMemberDTO = new TargetMemberDTO(); targetMemberDTO.setTargetMemberLevel(m.getName()); targetMemberDTO.setTargetStartPoint(m.getStartPoint()); targetMemberDTO.setTargetGap(m.getStartPoint() - sumGrowth); targetMemberDTO.setTargetDiscountAmount(m.getDiscountAmount()); targetMemberDTOList.add(targetMemberDTO); }); } userGrowthRecordDTO.setTargetMemberInfos(targetMemberDTOList); return userGrowthRecordDTO; } } src/main/java/com/mzl/flower/web/member/MemberController.java
@@ -6,9 +6,10 @@ import com.mzl.flower.base.R; import com.mzl.flower.base.ReturnDataDTO; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.dto.request.menber.MemberDTO; import com.mzl.flower.dto.request.menber.MemberQueryDTO; import com.mzl.flower.dto.request.menber.*; import com.mzl.flower.entity.menber.Member; import com.mzl.flower.entity.menber.MemberGrowthRecord; import com.mzl.flower.service.menber.MemberGrowthRecordService; import com.mzl.flower.service.menber.MemberService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -33,6 +34,8 @@ public class MemberController extends BaseController { private final MemberService memberService; private final MemberGrowthRecordService memberGrowthRecordService; @PostMapping("/member/list") @ApiOperation(value = "会员列表", httpMethod = "POST") @@ -66,5 +69,50 @@ memberService.updateMember(memberDTO); return returnData(R.SUCCESS.getCode(), null); } @PostMapping("/memberGrowthRecord/list") @ApiOperation(value = "会员记录列表", httpMethod = "POST") public ResponseEntity<ReturnDataDTO> getMemberRecordList(Page page, MemberRecordQueryDTO dto) { QueryWrapper<MemberGrowthRecord> queryWrapper = new QueryWrapper(); queryWrapper.lambda().eq(isNotNull(dto.getType()), MemberGrowthRecord::getType, dto.getType()) .eq(isNotNull(dto.getSource()), MemberGrowthRecord::getSource, dto.getSource()) .ge(isNotNull(dto.getStartRecordDate()), MemberGrowthRecord::getRecordDate, dto.getStartRecordDate()) .le(isNotNull(dto.getEndRecordDate()), MemberGrowthRecord::getRecordDate, dto.getEndRecordDate()); page = (Page) memberGrowthRecordService.page(page, queryWrapper); return returnData(R.SUCCESS.getCode(), page); } @DeleteMapping(value = "/memberGrowthRecord/delete/{id}") @ApiOperation(value = "删除会员记录 ", httpMethod = "DELETE", notes = "ID") public ResponseEntity deleteGrowthRecord(@PathVariable("id") Long id) { memberGrowthRecordService.deleteMemberGrowthRecord(String.valueOf(id)); return returnData(R.SUCCESS.getCode(), null); } @PostMapping(value = "/memberGrowthRecord/save") @ApiOperation(value = "保存会员记录", httpMethod = "POST") public ResponseEntity insertGrowthRecord(@RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) { MemberGrowthRecord memberGrowthRecord = new MemberGrowthRecord(); BeanUtils.copyProperties(memberGrowthRecordDTO, memberGrowthRecord); memberGrowthRecord.create(SecurityUtils.getUserId()); memberGrowthRecordService.saveMemberGrowthRecord(memberGrowthRecord); return returnData(R.SUCCESS.getCode(), null); } @PutMapping(value = "/memberGrowthRecord/update") @ApiOperation(value = "更新会员记录", httpMethod = "PUT") public ResponseEntity updateGrowthRecord(@RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) { memberGrowthRecordService.updateMemberGrowthRecord(memberGrowthRecordDTO); return returnData(R.SUCCESS.getCode(), null); } @GetMapping(value = "/member/info/{userId}") @ApiOperation(value = "当前用户会员信息 ", httpMethod = "GET", notes = "ID") public ResponseEntity memberInfo(@PathVariable("userId") Long userId) { UserGrowthRecordDTO userGrowthRecordDTO = memberGrowthRecordService.getInfoByUserId(String.valueOf(userId)); return returnData(R.SUCCESS.getCode(), userGrowthRecordDTO); } }