cloudroam
2024-08-29 bc5b7faee29815022f9acd9b57f1e41db36eac99
fix:会员管理调整
已修改12个文件
已添加2个文件
254 ■■■■ 文件已修改
src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/menber/MemberQueryDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/member/MemberGrowthRecordVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/member/MemberVO.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/menber/Member.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/member/MemberMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/menber/MemberService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/member/MemberController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/member/MemberGrowthRecordMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/member/MemberMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/menber/MemberDTO.java
@@ -3,6 +3,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Data
@@ -11,30 +12,39 @@
    private Long id;
    @ApiModelProperty("会员等级名称")
    @NotNull
    private String name;
    @ApiModelProperty("成长点-区间-开始")
    @NotNull
    private int startPoint;
    @ApiModelProperty("成长点-区间-结束")
    @NotNull
    private int endPoint;
    @ApiModelProperty("会员折扣类型(百分比、固定金额)")
    private int discountType;
    @NotNull
    private String discountType;
    @ApiModelProperty("会员折扣百分比")
    @NotNull
    private BigDecimal discountRatio;
    @ApiModelProperty("会员折扣固定金额")
    @NotNull
    private BigDecimal discountAmount;
    @ApiModelProperty("消费金额(元)")
    @NotNull
    private int consumptionAmount;
    @ApiModelProperty("已消费产生的成长值")
    @NotNull
    private int growthValue;
    @ApiModelProperty("未消费产生的下降值")
    @NotNull
    private int downgradeValue;
}
src/main/java/com/mzl/flower/dto/request/menber/MemberQueryDTO.java
@@ -5,6 +5,6 @@
@Data
public class MemberQueryDTO {
    @ApiModelProperty(value = "会员等级")
    private String levelName;
    @ApiModelProperty(value = "会员等级名称")
    private String name;
}
src/main/java/com/mzl/flower/dto/response/member/MemberGrowthRecordVO.java
对比新文件
@@ -0,0 +1,48 @@
package com.mzl.flower.dto.response.member;
import com.mzl.flower.base.AbstractTransDTO;
import com.mzl.flower.base.annotation.DictTrans;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigInteger;
import java.time.LocalDateTime;
import java.util.Date;
@Data
public class MemberGrowthRecordVO extends AbstractTransDTO {
    private Long id;
    @ApiModelProperty("记录日期")
    private Date recordDate;
    @ApiModelProperty("成长值")
    private int growth;
    @ApiModelProperty("用户id")
    private String userId;
    @ApiModelProperty("商户ID")
    private BigInteger customerId;
    @ApiModelProperty("成长值来源(growth_source:签到、消费)")
    @DictTrans(target = "sourceStr", codeType = "GROWTH_SOURCE")
    private String source;
    private String sourceStr;
    @ApiModelProperty("新增、扣除(growth_type)")
    @DictTrans(target = "typeStr", codeType = "GROWTH_TYPE")
    private String type;
    private String typeStr;
    @ApiModelProperty("备注")
    private String remarks;
    @ApiModelProperty("创建日期")
    private LocalDateTime createTime;
    @ApiModelProperty("修改日期")
    private LocalDateTime updateTime;
}
src/main/java/com/mzl/flower/dto/response/member/MemberVO.java
@@ -1,4 +1,50 @@
package com.mzl.flower.dto.response.member;
public class MemberVO {
import com.mzl.flower.base.AbstractTransDTO;
import com.mzl.flower.base.annotation.DictTrans;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class MemberVO extends AbstractTransDTO {
    private Long id;
    @ApiModelProperty("会员等级名称")
    private String name;
    @ApiModelProperty("成长点-区间-开始")
    private int startPoint;
    @ApiModelProperty("成长点-区间-结束")
    private int endPoint;
    @ApiModelProperty("会员折扣类型(百分比、固定金额)")
    @DictTrans(target = "discountTypeStr", codeType = "DISCOUNT_TYPE")
    private String discountType;
    private String discountTypeStr;
    @ApiModelProperty("会员折扣百分比")
    private BigDecimal discountRatio;
    @ApiModelProperty("会员折扣固定金额")
    private BigDecimal discountAmount;
    @ApiModelProperty("消费金额(元)")
    private int consumptionAmount;
    @ApiModelProperty("已消费产生的成长值")
    private int growthValue;
    @ApiModelProperty("未消费产生的下降值")
    private int downgradeValue;
    @ApiModelProperty("创建日期")
    private LocalDateTime createTime;
    @ApiModelProperty("修改日期")
    private LocalDateTime updateTime;
}
src/main/java/com/mzl/flower/entity/menber/Member.java
@@ -5,6 +5,7 @@
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
@@ -28,7 +29,7 @@
    private int endPoint;
    @ApiModelProperty("会员折扣类型(百分比、固定金额)")
    private int discountType;
    private String discountType;
    @ApiModelProperty("会员折扣百分比")
    private BigDecimal discountRatio;
src/main/java/com/mzl/flower/mapper/member/MemberGrowthRecordMapper.java
@@ -1,11 +1,15 @@
package com.mzl.flower.mapper.member;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mzl.flower.entity.menber.Member;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.menber.MemberRecordQueryDTO;
import com.mzl.flower.dto.response.member.MemberGrowthRecordVO;
import com.mzl.flower.entity.menber.MemberGrowthRecord;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
@@ -22,4 +26,6 @@
    @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);
    List<MemberGrowthRecordVO> queryPage(@Param("dto") MemberRecordQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/mapper/member/MemberMapper.java
@@ -1,6 +1,9 @@
package com.mzl.flower.mapper.member;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.menber.MemberQueryDTO;
import com.mzl.flower.dto.response.member.MemberVO;
import com.mzl.flower.entity.menber.Member;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@@ -30,4 +33,6 @@
    @Select("select * from t_member where start_point > #{growthValue} and deleted = '0' ")
    List<Member> getgtMembersByGrowthValue(@Param("growthValue") Integer growthValue);
    List<MemberVO> queryPage(@Param("dto") MemberQueryDTO dto, Page page);
}
src/main/java/com/mzl/flower/service/menber/MemberGrowthRecordService.java
@@ -1,9 +1,12 @@
package com.mzl.flower.service.menber;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO;
import com.mzl.flower.dto.request.menber.MemberRecordQueryDTO;
import com.mzl.flower.dto.request.menber.UserGrowthRecordDTO;
import com.mzl.flower.dto.response.member.MemberGrowthRecordVO;
import com.mzl.flower.entity.menber.MemberGrowthRecord;
@@ -13,4 +16,6 @@
    void updateMemberGrowthRecord(MemberGrowthRecordDTO memberGrowthRecordDTO);
    void deleteMemberGrowthRecord(String id);
    UserGrowthRecordDTO getInfoByUserId(String userId);
    Page<MemberGrowthRecordVO> queryPage(MemberRecordQueryDTO memberRecordQueryDTO, Page page);
}
src/main/java/com/mzl/flower/service/menber/MemberService.java
@@ -1,8 +1,11 @@
package com.mzl.flower.service.menber;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mzl.flower.dto.request.menber.MemberDTO;
import com.mzl.flower.dto.request.menber.MemberQueryDTO;
import com.mzl.flower.dto.response.member.MemberVO;
import com.mzl.flower.entity.menber.Member;
@@ -12,4 +15,6 @@
    void updateMember(MemberDTO memberDTO);
    void deleteMember(String id);
    Page<MemberVO> queryPage(MemberQueryDTO memberQueryDTO, Page page);
}
src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
@@ -1,11 +1,14 @@
package com.mzl.flower.service.menber.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.MemberRecordQueryDTO;
import com.mzl.flower.dto.request.menber.TargetMemberDTO;
import com.mzl.flower.dto.request.menber.UserGrowthRecordDTO;
import com.mzl.flower.dto.response.member.MemberGrowthRecordVO;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.entity.menber.MemberGrowthRecord;
import com.mzl.flower.mapper.member.MemberGrowthRecordMapper;
@@ -89,4 +92,11 @@
        return userGrowthRecordDTO;
    }
    @Override
    public Page<MemberGrowthRecordVO> queryPage(MemberRecordQueryDTO memberRecordQueryDTO, Page page) {
        List<MemberGrowthRecordVO> list = memberGrowthRecordMapper.queryPage(memberRecordQueryDTO, page);
        page.setRecords(list);
        return page;
    }
}
src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java
@@ -1,9 +1,12 @@
package com.mzl.flower.service.menber.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.MemberDTO;
import com.mzl.flower.dto.request.menber.MemberQueryDTO;
import com.mzl.flower.dto.response.member.MemberVO;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.mapper.member.MemberMapper;
import com.mzl.flower.service.menber.MemberService;
@@ -13,6 +16,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.List;
/**
 * @author fanghaowei
@@ -33,6 +38,10 @@
        if (StringUtils.isEmpty(member.getName())) {
            throw new ValidationException("会员等级名称不能为空");
        }
        if (member.getStartPoint()>member.getEndPoint()) {
            throw new ValidationException("成长点开始不能大于结束");
        }
        //保存时判断是否有重复的名称
        Member memberByName = memberMapper.getMemberByName(member.getName());
        if (!ObjectUtils.isEmpty(memberByName)) {
@@ -47,9 +56,9 @@
        if (memberInfo == null) {
            throw new ValidationException("会员等级信息不存在");
        }
        if (!memberInfo.getCreateBy().equals(SecurityUtils.getUserId())) {
            throw new ValidationException("无权限修改");
        }
//        if (!memberInfo.getCreateBy().equals(SecurityUtils.getUserId())) {
//            throw new ValidationException("无权限修改");
//        }
        Member memberTemp = memberMapper.getMemberByName(memberDTO.getName());
        //判断如果按照会员等级查询到得名称和当前得Id不一致,不能修改。
        if (!ObjectUtils.isEmpty(memberTemp)) {
@@ -72,4 +81,11 @@
        // TODO: 2024/8/26 如果当前会员绑定了优惠券,不能删除,等优惠券逻辑完成。 
        memberMapper.deleteById(id);
    }
    @Override
    public Page<MemberVO> queryPage(MemberQueryDTO memberQueryDTO, Page page) {
        List<MemberVO> list = memberMapper.queryPage(memberQueryDTO, page);
        page.setRecords(list);
        return page;
    }
}
src/main/java/com/mzl/flower/web/member/MemberController.java
@@ -1,12 +1,13 @@
package com.mzl.flower.web.member;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.base.BaseController;
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.*;
import com.mzl.flower.dto.response.member.MemberGrowthRecordVO;
import com.mzl.flower.dto.response.member.MemberVO;
import com.mzl.flower.entity.menber.Member;
import com.mzl.flower.entity.menber.MemberGrowthRecord;
import com.mzl.flower.service.menber.MemberGrowthRecordService;
@@ -16,9 +17,10 @@
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import static com.baomidou.mybatisplus.core.toolkit.ObjectUtils.isNotNull;
import javax.validation.constraints.NotNull;
/**
 * @author fanghaowei
@@ -39,21 +41,18 @@
    @PostMapping("/member/list")
    @ApiOperation(value = "会员列表", httpMethod = "POST")
    public ResponseEntity<ReturnDataDTO> getMemberList(Page page, MemberQueryDTO dto) {
        QueryWrapper<Member> queryWrapper = new QueryWrapper();
        queryWrapper.lambda().eq(isNotNull(dto.getLevelName()), Member::getName, dto.getLevelName());
        page = (Page) memberService.page(page, queryWrapper);
        return returnData(R.SUCCESS.getCode(), page);
    public ResponseEntity<ReturnDataDTO<Page<MemberVO>>> getMemberList(Page page, MemberQueryDTO dto) {
        return returnData(R.SUCCESS.getCode(), memberService.queryPage(dto, page));
    }
    @DeleteMapping(value = "/member/delete/{id}")
    @ApiOperation(value = "删除会员 ", httpMethod = "DELETE", notes = "ID")
    public ResponseEntity delete(@PathVariable("id") Long id) {
    @GetMapping(value = "/member/delete")
    @ApiOperation(value = "删除会员 ", httpMethod = "GET", notes = "ID")
    public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) {
        memberService.deleteMember(String.valueOf(id));
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PostMapping(value = "/member/save")
    @PostMapping(value = "/member/new")
    @ApiOperation(value = "保存会员", httpMethod = "POST")
    public ResponseEntity insert(@RequestBody MemberDTO memberDTO) {
        Member member = new Member();
@@ -63,35 +62,28 @@
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PutMapping(value = "/member/update")
    @ApiOperation(value = "更新会员", httpMethod = "PUT")
    public ResponseEntity update(@RequestBody MemberDTO memberDTO) {
    @PostMapping(value = "/member/edit")
    @ApiOperation(value = "更新会员", httpMethod = "POST")
    public ResponseEntity update(@Validated @RequestBody MemberDTO memberDTO) {
        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);
    public ResponseEntity<ReturnDataDTO<Page<MemberGrowthRecordVO>>> getMemberRecordList(Page page, MemberRecordQueryDTO dto) {
        return returnData(R.SUCCESS.getCode(), memberGrowthRecordService.queryPage(dto, page));
    }
    @DeleteMapping(value = "/memberGrowthRecord/delete/{id}")
    @ApiOperation(value = "删除会员记录 ", httpMethod = "DELETE", notes = "ID")
    public ResponseEntity deleteGrowthRecord(@PathVariable("id") Long id) {
    @GetMapping(value = "/memberGrowthRecord/delete")
    @ApiOperation(value = "删除会员记录 ", httpMethod = "GET", notes = "ID")
    public ResponseEntity deleteGrowthRecord(@NotNull(message = "id不能为空") Long id) {
        memberGrowthRecordService.deleteMemberGrowthRecord(String.valueOf(id));
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PostMapping(value = "/memberGrowthRecord/save")
    @PostMapping(value = "/memberGrowthRecord/new")
    @ApiOperation(value = "保存会员记录", httpMethod = "POST")
    public ResponseEntity insertGrowthRecord(@RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) {
        MemberGrowthRecord memberGrowthRecord = new MemberGrowthRecord();
@@ -101,9 +93,9 @@
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PutMapping(value = "/memberGrowthRecord/update")
    @ApiOperation(value = "更新会员记录", httpMethod = "PUT")
    public ResponseEntity updateGrowthRecord(@RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) {
    @PostMapping(value = "/memberGrowthRecord/edit")
    @ApiOperation(value = "更新会员记录", httpMethod = "POST")
    public ResponseEntity updateGrowthRecord(@Validated @RequestBody MemberGrowthRecordDTO memberGrowthRecordDTO) {
        memberGrowthRecordService.updateMemberGrowthRecord(memberGrowthRecordDTO);
        return returnData(R.SUCCESS.getCode(), null);
    }
src/main/resources/mapper/member/MemberGrowthRecordMapper.xml
对比新文件
@@ -0,0 +1,25 @@
<?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="com.mzl.flower.mapper.member.MemberGrowthRecordMapper">
    <select id="queryPage" resultType="com.mzl.flower.dto.response.member.MemberGrowthRecordVO">
        select * from t_member_growth_record t where t.deleted= 0
        <if test="dto.type != null and dto.type != ''">
            and t.type = #{dto.type}
        </if>
        <if test="dto.source != null and dto.source != ''">
            and t.source = #{dto.source}
        </if>
        <if test="dto.startRecordDate!=null ">
            <![CDATA[
               AND t.create_time >= #{dto.startRecordDate}
            ]]>
        </if>
        <if test="dto.endRecordDate!=null ">
            <![CDATA[
               AND t.create_time <= #{dto.endRecordDate}
            ]]>
        </if>
        order by t.update_time desc
    </select>
</mapper>
src/main/resources/mapper/member/MemberMapper.xml
@@ -2,4 +2,11 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mzl.flower.mapper.member.MemberMapper">
    <select id="queryPage" resultType="com.mzl.flower.dto.response.member.MemberVO">
        select * from t_member t where t.deleted= 0
        <if test="dto.name != null and dto.name != ''">
            and t.name like concat('%', #{dto.name}, '%')
        </if>
        order by t.update_time desc
    </select>
</mapper>