cloudroam
2024-08-27 d845b016623f7f6314aab739b485fe5d3400bb22
add:会员成长记录;个人会员信息查看
已修改4个文件
已添加8个文件
333 ■■■■■ 文件已修改
src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/menber/MemberGrowthRecordDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/menber/MemberRecordQueryDTO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/menber/TargetMemberDTO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/menber/UserGrowthRecordDTO.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/menber/Member.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/menber/MemberGrowthRecord.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/member/MemberMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/member/MemberController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
}