From fda497925e0ab5c3f13c5f8cdc459ac0ba2f75fa Mon Sep 17 00:00:00 2001 From: LiJianZhao Date: Sun, 27 Apr 2025 11:28:53 +0800 Subject: [PATCH] deb --- .../server/controller/vip/VipController.java | 90 +++++++ .../controller/vip/VipIntegralController.java | 40 +++ .../vip/VipLevelConfigController.java | 80 ++++++ .../syjiaer/clinic/server/entity/vip/Vip.java | 85 +++++++ .../clinic/server/entity/vip/VipExpLog.java | 53 ++++ .../server/entity/vip/VipIntegralLog.java | 53 ++++ .../server/entity/vip/VipLevelConfig.java | 45 ++++ .../entity/vip/dto/VipIntegralLogQuery.java | 12 + .../server/mapper/vip/VipExpLogMapper.java | 18 ++ .../mapper/vip/VipIntegralLogMapper.java | 18 ++ .../mapper/vip/VipLevelConfigMapper.java | 17 ++ .../clinic/server/mapper/vip/VipMapper.java | 18 ++ .../service/vip/VipIntegralLogService.java | 50 ++++ .../service/vip/VipLevelConfigService.java | 136 ++++++++++ .../clinic/server/service/vip/VipService.java | 233 ++++++++++++++++++ src/main/resources/xml/VipExpLogMapper.xml | 5 + .../resources/xml/VipIntegralLogMapper.xml | 5 + .../resources/xml/VipLevelConfigMapper.xml | 5 + src/main/resources/xml/VipMapper.xml | 5 + 19 files changed, 968 insertions(+) create mode 100644 src/main/java/com/syjiaer/clinic/server/controller/vip/VipController.java create mode 100644 src/main/java/com/syjiaer/clinic/server/controller/vip/VipIntegralController.java create mode 100644 src/main/java/com/syjiaer/clinic/server/controller/vip/VipLevelConfigController.java create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/vip/Vip.java create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/vip/VipExpLog.java create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/vip/VipIntegralLog.java create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/vip/VipLevelConfig.java create mode 100644 src/main/java/com/syjiaer/clinic/server/entity/vip/dto/VipIntegralLogQuery.java create mode 100644 src/main/java/com/syjiaer/clinic/server/mapper/vip/VipExpLogMapper.java create mode 100644 src/main/java/com/syjiaer/clinic/server/mapper/vip/VipIntegralLogMapper.java create mode 100644 src/main/java/com/syjiaer/clinic/server/mapper/vip/VipLevelConfigMapper.java create mode 100644 src/main/java/com/syjiaer/clinic/server/mapper/vip/VipMapper.java create mode 100644 src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java create mode 100644 src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java create mode 100644 src/main/java/com/syjiaer/clinic/server/service/vip/VipService.java create mode 100644 src/main/resources/xml/VipExpLogMapper.xml create mode 100644 src/main/resources/xml/VipIntegralLogMapper.xml create mode 100644 src/main/resources/xml/VipLevelConfigMapper.xml create mode 100644 src/main/resources/xml/VipMapper.xml diff --git a/src/main/java/com/syjiaer/clinic/server/controller/vip/VipController.java b/src/main/java/com/syjiaer/clinic/server/controller/vip/VipController.java new file mode 100644 index 0000000..4a2e790 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/controller/vip/VipController.java @@ -0,0 +1,90 @@ +package com.syjiaer.clinic.server.controller.vip; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.common.vo.Result; +import com.syjiaer.clinic.server.controller.BaseController; +import com.syjiaer.clinic.server.entity.vip.Vip; +import com.syjiaer.clinic.server.service.vip.VipLevelConfigService; +import com.syjiaer.clinic.server.service.vip.VipService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.time.LocalDate; +import java.util.List; + +/** + *

+ * 商品 前端控制器 + *

+ * + * @author NiuZiYuan + * @since 2025-02-21 + */ +@RestController +@RequestMapping("/vip/vip") +public class VipController extends BaseController { + + @Autowired + private VipService vipService; + @Autowired + private VipLevelConfigService vipLevelConfigService; + + @RequestMapping("/create") + public Result create() { + Vip vip = parmsUtil.getObject("vipInfo", Vip.class); + vipService.create(vip); + + return success(); + } + + @RequestMapping("/update") + public Result update() { + Vip vip = parmsUtil.getObject("vip", Vip.class); + + vipService.update(vip); + + return success(); + } + + @RequestMapping("/delete") + public Result delete() { + int vipId = parmsUtil.getInteger("id", "ID不能为空"); + return success(vipService.removeById(vipId)); + } + + @RequestMapping("/list") + public Result> selectList() { + String keyword = parmsUtil.getString("keyword"); + int page = parmsUtil.getInteger("page", "请输入页码"); + int pageSize = parmsUtil.getInteger("pageSize", "请输入每页条数"); + Page list = vipService.pageList(keyword, page, pageSize); + return success(list); + } + + @RequestMapping("/get") + public Result get() { + int id = parmsUtil.getInteger("id", "ID不能为空"); + Vip vip = vipService.getById(id); + return success(vip); + } + + @RequestMapping("/search") + public Result> search() { + String keyword = parmsUtil.getString("keyword", "关键字不能为空"); + List list = vipService.search(keyword); + return success(list); + } + + @RequestMapping("/changeLevel") + public Result changeLevel() { + int vipId = parmsUtil.getInteger("vipId", "会员ID不能为空"); + int levelId = parmsUtil.getInteger("levelId", "等级id不能为空"); + vipService.changeLevel(vipId, levelId); + + return success(); + } + + +} diff --git a/src/main/java/com/syjiaer/clinic/server/controller/vip/VipIntegralController.java b/src/main/java/com/syjiaer/clinic/server/controller/vip/VipIntegralController.java new file mode 100644 index 0000000..9dc7eca --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/controller/vip/VipIntegralController.java @@ -0,0 +1,40 @@ +package com.syjiaer.clinic.server.controller.vip; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.common.vo.Result; +import com.syjiaer.clinic.server.controller.BaseController; +import com.syjiaer.clinic.server.entity.vip.VipIntegralLog; +import com.syjiaer.clinic.server.entity.vip.dto.VipIntegralLogQuery; +import com.syjiaer.clinic.server.service.vip.VipIntegralLogService; +import com.syjiaer.clinic.server.service.vip.VipService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/vip/integral") +public class VipIntegralController extends BaseController { + @Autowired + private VipService vipService; + @Autowired + private VipIntegralLogService vipIntegralLogService; + + @RequestMapping("/add") + public Result add(){ + Integer vipId = parmsUtil.getInteger("vipId","请输入会员id"); + Integer Integral = parmsUtil.getInteger("integral","请输入积分"); + String remark = parmsUtil.getString("remark","请输入备注"); + vipService.changeIntegral(vipId,Integral,remark); + return success(); + } + @RequestMapping("/list") + public Result> listByVipId(){ + VipIntegralLogQuery query = parmsUtil.getObject("query", VipIntegralLogQuery.class); + Page page = vipIntegralLogService.pageList(query); + return success(page); + + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/controller/vip/VipLevelConfigController.java b/src/main/java/com/syjiaer/clinic/server/controller/vip/VipLevelConfigController.java new file mode 100644 index 0000000..374bb93 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/controller/vip/VipLevelConfigController.java @@ -0,0 +1,80 @@ +package com.syjiaer.clinic.server.controller.vip; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.syjiaer.clinic.server.common.vo.Result; +import com.syjiaer.clinic.server.controller.BaseController; +import com.syjiaer.clinic.server.entity.vip.VipLevelConfig; +import com.syjiaer.clinic.server.service.vip.VipLevelConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 商品 前端控制器 + *

+ * + * @author NiuZiYuan + * @since 2025-02-21 + */ +@RestController +@RequestMapping("/vip/vipLevel") +public class VipLevelConfigController extends BaseController { + @Autowired + private VipLevelConfigService vipLevelConfigService; + + @RequestMapping("/create") + public Result create() { + VipLevelConfig levelConfig = parmsUtil.getObject("vipLevelConfig", VipLevelConfig.class); + vipLevelConfigService.create(levelConfig); + return success(); + } + + @RequestMapping("/edit") + public Result edit() { + VipLevelConfig levelConfig = parmsUtil.getObject("vipLevelConfig", VipLevelConfig.class); + + vipLevelConfigService.update(levelConfig); + + return success(); + } + + @RequestMapping("/save") + @Transactional + public Result save() { + List levelConfigList = parmsUtil.getList("vipLevelConfig", VipLevelConfig.class); + vipLevelConfigService.save(levelConfigList); + + return success(); + } + + @RequestMapping("/delete") + @Transactional(rollbackFor = Exception.class) + public Result delete() { + int id = parmsUtil.getInteger("id", "ID不能为空"); + vipLevelConfigService.delete(id); + + return success(); + } + + @RequestMapping("/list") + public Result> selectList() { + + List list = vipLevelConfigService.list(); + return success(list); + } + + @RequestMapping("/get") + public Result get() { + int levelId = parmsUtil.getInteger("levelId", "ID不能为空"); + + VipLevelConfig level = vipLevelConfigService.getByLevelId(levelId); + return success(level); + } + +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/vip/Vip.java b/src/main/java/com/syjiaer/clinic/server/entity/vip/Vip.java new file mode 100644 index 0000000..55db9aa --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/vip/Vip.java @@ -0,0 +1,85 @@ +package com.syjiaer.clinic.server.entity.vip; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@ApiModel(value = "Vip对象", description = "") +public class Vip implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("姓名") + private String realName; + + @ApiModelProperty("性别") + private String sex; + + @ApiModelProperty("手机号") + private String phone; + + @ApiModelProperty("生日") + private LocalDate birthday; + + @ApiModelProperty("年龄") + private Integer age; + + @ApiModelProperty("身份证号") + private String idCode; + + @ApiModelProperty("来源") + private String source; + + @ApiModelProperty("民族") + private String nation; + + @ApiModelProperty("地区") + private String area; + + @ApiModelProperty("地址") + private String address; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("创建日期") + private LocalDate createDatetime; + + @ApiModelProperty("会员等级 0表示没有等级") + private Integer levelId; + + @ApiModelProperty("会员经验值") + private Integer exp; + + @ApiModelProperty("积分余额") + private Integer integralBalance; + + @ApiModelProperty("0没绑医保 1已绑定") + private Integer isBindSocial; + + @ApiModelProperty("余额") + private BigDecimal balance; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/vip/VipExpLog.java b/src/main/java/com/syjiaer/clinic/server/entity/vip/VipExpLog.java new file mode 100644 index 0000000..8afe0b0 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/vip/VipExpLog.java @@ -0,0 +1,53 @@ +package com.syjiaer.clinic.server.entity.vip; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("vip_exp_log") +@ApiModel(value = "VipExpLog对象", description = "") +public class VipExpLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("开始经验值") + private Integer startExp; + + @ApiModelProperty("变化经验值") + private Integer changeExp; + + @ApiModelProperty("结束经验值") + private Integer endExp; + + @ApiModelProperty("vip表外键") + private Integer vipId; + + @ApiModelProperty("创建时间") + private LocalDateTime createDatetime; + + @ApiModelProperty("备注") + private String remark; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/vip/VipIntegralLog.java b/src/main/java/com/syjiaer/clinic/server/entity/vip/VipIntegralLog.java new file mode 100644 index 0000000..2d2a58f --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/vip/VipIntegralLog.java @@ -0,0 +1,53 @@ +package com.syjiaer.clinic.server.entity.vip; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("vip_integral_log") +@ApiModel(value = "VipIntegralLog对象", description = "") +public class VipIntegralLog implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(" 自增id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("变化前值") + private Integer beforeIntegral; + + @ApiModelProperty("变化后值") + private Integer afterIntegral; + + @ApiModelProperty("变化量") + private Integer changeIntegral; + + @ApiModelProperty("备注") + private String remark; + + @ApiModelProperty("记录时间") + private LocalDateTime createTime; + + @ApiModelProperty("会员id") + private Integer vipId; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/vip/VipLevelConfig.java b/src/main/java/com/syjiaer/clinic/server/entity/vip/VipLevelConfig.java new file mode 100644 index 0000000..5bc80b8 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/vip/VipLevelConfig.java @@ -0,0 +1,45 @@ +package com.syjiaer.clinic.server.entity.vip; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +/** + *

+ * + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("vip_level_config") +@ApiModel(value = "VipLevelConfig对象", description = "") +public class VipLevelConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("自增id") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty("等级名称") + private String name; + + @ApiModelProperty("等级起始经验值") + private Integer startExp; + + @ApiModelProperty("折扣比例 为1-100整数") + private Integer discountRate; + + private Integer levelId; +} diff --git a/src/main/java/com/syjiaer/clinic/server/entity/vip/dto/VipIntegralLogQuery.java b/src/main/java/com/syjiaer/clinic/server/entity/vip/dto/VipIntegralLogQuery.java new file mode 100644 index 0000000..8f14205 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/entity/vip/dto/VipIntegralLogQuery.java @@ -0,0 +1,12 @@ +package com.syjiaer.clinic.server.entity.vip.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class VipIntegralLogQuery { + private Integer vipId; + private Integer pageNum; + private Integer pageSize; +} diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipExpLogMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipExpLogMapper.java new file mode 100644 index 0000000..fc330bc --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipExpLogMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.vip; + +import com.syjiaer.clinic.server.entity.vip.VipExpLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +public interface VipExpLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipIntegralLogMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipIntegralLogMapper.java new file mode 100644 index 0000000..c7747c3 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipIntegralLogMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.vip; + +import com.syjiaer.clinic.server.entity.vip.VipIntegralLog; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +public interface VipIntegralLogMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipLevelConfigMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipLevelConfigMapper.java new file mode 100644 index 0000000..c325acf --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipLevelConfigMapper.java @@ -0,0 +1,17 @@ +package com.syjiaer.clinic.server.mapper.vip; + +import com.syjiaer.clinic.server.entity.vip.VipLevelConfig; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +public interface VipLevelConfigMapper extends BaseMapper { +} + diff --git a/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipMapper.java b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipMapper.java new file mode 100644 index 0000000..533f1b4 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/mapper/vip/VipMapper.java @@ -0,0 +1,18 @@ +package com.syjiaer.clinic.server.mapper.vip; + +import com.syjiaer.clinic.server.entity.vip.Vip; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + + +/** + *

+ * Mapper 接口 + *

+ * + * @author NiuZiYuan + * @since 2025-04-27 + */ +public interface VipMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java b/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java new file mode 100644 index 0000000..07d1ab5 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/service/vip/VipIntegralLogService.java @@ -0,0 +1,50 @@ +package com.syjiaer.clinic.server.service.vip; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.syjiaer.clinic.server.common.constants.Constants; +import com.syjiaer.clinic.server.common.exception.MessageException; +import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.entity.vip.Vip; +import com.syjiaer.clinic.server.entity.vip.VipIntegralLog; +import com.syjiaer.clinic.server.entity.vip.dto.VipIntegralLogQuery; +import com.syjiaer.clinic.server.mapper.vip.VipIntegralLogMapper; +import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper; +import com.syjiaer.clinic.server.mapper.vip.VipMapper; +import com.syjiaer.clinic.server.service.BaseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class VipIntegralLogService extends BaseService { + @Autowired + private VipMapper vipMapper; + @Autowired + private VipLevelConfigMapper vipLevelConfigMapper; + @Autowired + private VipIntegralLogMapper vipIntegralLogMapper; + + public Page pageList(VipIntegralLogQuery query) { + if (query == null){ + throw new MessageException("没有带查询条件"); + } + if (query.getPageNum() == null|| query.getPageNum() == 0){ + query.setPageNum(1); + } + if (query.getPageSize() == null || query.getPageSize() == 0){ + query.setPageSize(Constants.DetailPageSize); + } + Vip vip = null; + if (query.getVipId() != null){ + vip = vipMapper.selectById(query.getVipId()); + } + if (vip == null){ + throw new MessageException("会员不存在"); + } + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("vip_id",query.getVipId()); + return pageHelper(query.getPageNum(), query.getPageSize(), queryWrapper, vipIntegralLogMapper, "create_time", false); + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java b/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java new file mode 100644 index 0000000..88f6857 --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/service/vip/VipLevelConfigService.java @@ -0,0 +1,136 @@ +package com.syjiaer.clinic.server.service.vip; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.syjiaer.clinic.server.entity.vip.VipLevelConfig; +import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper; +import com.syjiaer.clinic.server.service.BaseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class VipLevelConfigService extends BaseService { + @Autowired + private VipLevelConfigMapper vipLevelConfigMapper; + @Autowired + private VipService vipService; + + /** + * 根据经验值获取会员等级 + * @param exp + * @return + */ + public VipLevelConfig getByExp(Integer exp) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.le("start_exp",exp); + queryWrapper.orderByDesc("start_exp"); + List vipLevelConfig = vipLevelConfigMapper.selectList(queryWrapper); + if (!vipLevelConfig.isEmpty()){ + return vipLevelConfig.get(0); + } + return null; + } + + /** + * 创建会员等级 + * @param levelConfig + */ + @Transactional(rollbackFor = Exception.class) + public void create(VipLevelConfig levelConfig) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("id"); + queryWrapper.last("limit 1"); + VipLevelConfig lastLevel = vipLevelConfigMapper.selectOne(queryWrapper); + if(lastLevel==null){ + levelConfig.setStartExp(0); + } + vipLevelConfigMapper.insert(levelConfig); + List list =vipLevelConfigMapper.selectList(null); + for (int i=0;i updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",vipLevelConfig.getId()); + updateWrapper.set("level_id",i+1); + vipLevelConfigMapper.update(updateWrapper); + } + } + + /** + * 更新等级信息 + * @param levelConfig + */ + @Transactional(rollbackFor = Exception.class) + public void update(VipLevelConfig levelConfig) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("id"); + queryWrapper.last("limit 1"); + VipLevelConfig lastLevel = vipLevelConfigMapper.selectOne(queryWrapper); + if(lastLevel==null){ + levelConfig.setStartExp(0); + } + vipLevelConfigMapper.updateById(levelConfig); + List list =vipLevelConfigMapper.selectList(null); + for (int i=0;i updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id",vipLevelConfig.getId()); + updateWrapper.set("level_id",i+1); + vipLevelConfigMapper.update(updateWrapper); + } + + } + + /** + * 保存vip等级列表 + */ + @Transactional(rollbackFor = Exception.class) + public void save( List levelConfigList) { + List insertList = new ArrayList<>(); + for (int i =0 ; i list() { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByAsc("level_id"); + return vipLevelConfigMapper.selectList(queryWrapper); + } + + /** + * 根据levelId获取等级配置 + * @param levelId + * @return + */ + public VipLevelConfig getByLevelId(Integer levelId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("level_id", levelId); + return vipLevelConfigMapper.selectOne(queryWrapper); + } +} diff --git a/src/main/java/com/syjiaer/clinic/server/service/vip/VipService.java b/src/main/java/com/syjiaer/clinic/server/service/vip/VipService.java new file mode 100644 index 0000000..6d8d7dd --- /dev/null +++ b/src/main/java/com/syjiaer/clinic/server/service/vip/VipService.java @@ -0,0 +1,233 @@ +package com.syjiaer.clinic.server.service.vip; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.syjiaer.clinic.server.common.exception.MessageException; +import com.syjiaer.clinic.server.common.vo.Page; +import com.syjiaer.clinic.server.entity.vip.Vip; +import com.syjiaer.clinic.server.entity.vip.VipExpLog; +import com.syjiaer.clinic.server.entity.vip.VipIntegralLog; +import com.syjiaer.clinic.server.entity.vip.VipLevelConfig; +import com.syjiaer.clinic.server.mapper.vip.VipExpLogMapper; +import com.syjiaer.clinic.server.mapper.vip.VipIntegralLogMapper; +import com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper; +import com.syjiaer.clinic.server.mapper.vip.VipMapper; +import com.syjiaer.clinic.server.service.BaseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Iterator; +import java.util.List; + +@Service +public class VipService extends BaseService { + @Autowired + @Lazy + private VipLevelConfigService vipLevelConfigService; + @Autowired + private VipLevelConfigMapper vipLevelConfigMapper; + @Autowired + private VipExpLogMapper vipExpLogMapper; + @Autowired + private VipIntegralLogMapper vipIntegralLogMapper; + @Autowired + private VipMapper vipMapper; + @Autowired + @Lazy + private VipService vipService; + + /** + * 新建vip + * @param vip + */ + public void create(Vip vip) { + vip.setCreateDatetime(LocalDate.now()); + Integer exp = vip.getExp(); + if (vip.getBirthday() != null) { + int currentYear = LocalDate.now().getYear(); + int birthYear = vip.getBirthday().getYear(); + vip.setAge(currentYear - birthYear); + } + vip.setExp(0); + VipLevelConfig level = vipLevelConfigService.getByExp(vip.getExp()); + if (level != null){ + vip.setLevelId(level.getLevelId()); + }else { + vip.setLevelId(0); + } + + vipMapper.insert(vip); + if (exp != null && exp > 0){ + vipService.changeExp(vip.getId(), exp, "会员创建"); + } + } + + /** + * 改变会员经验值 + * @param vipId + * @param changeExp + * @param remark + */ + @Transactional(rollbackFor = Exception.class) + public void changeExp(int vipId, int changeExp, String remark){ + Vip vip = vipMapper.selectById(vipId); + if(vip==null){ + throw new MessageException("会员不存在"); + } + int start_exp = vip.getExp(); + int end_exp = start_exp + changeExp; + if(end_exp<0){ + end_exp=0; + changeExp = -start_exp; + } + vip.setExp(end_exp); + // 记录日志 + VipExpLog vipExpLog = new VipExpLog(); + vipExpLog.setStartExp(start_exp); + vipExpLog.setChangeExp(changeExp); + vipExpLog.setEndExp(end_exp); + vipExpLog.setVipId(vipId); + vipExpLog.setCreateDatetime(LocalDateTime.now()); + vipExpLog.setRemark(remark); + //更新VIP等级 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.orderByDesc("start_exp"); + List vipLevelConfigs = vipLevelConfigMapper.selectList(queryWrapper); + for (VipLevelConfig vipLevelConfig : vipLevelConfigs) { + if(end_exp>=vipLevelConfig.getStartExp()){ + vip.setLevelId(vipLevelConfig.getLevelId()); + System.out.println(vipLevelConfig.getLevelId()); + System.out.println(end_exp); + break; + } + } + UpdateWrapper updateWrapper = new UpdateWrapper(); + updateWrapper.eq("id",vipId); + updateWrapper.set("level_id",vip.getLevelId()); + updateWrapper.set("exp",vip.getExp()); + // 保存 + vipMapper.update(updateWrapper); + vipExpLogMapper.insert(vipExpLog); + } + + /** + * 更新vip基本信息 经验值和积分不更新 + * @param vip + */ + public void update(Vip vip) { + vip.setExp(null); + vip.setLevelId(null); + vipMapper.updateById(vip); + } + + public int removeById(int vipId) { + return vipMapper.deleteById(vipId); + } + + /** + * vip分页查询 + * @param keyword + * @param pageNum + * @param pageSize + * @return + */ + public Page pageList(String keyword, int pageNum, int pageSize) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (keyword != null && !keyword.isEmpty()){ + queryWrapper.like("real_name",keyword); + queryWrapper.or().like("phone",keyword); + queryWrapper.or().like("id_code",keyword); + } + return pageHelper(pageNum, pageSize, queryWrapper, vipMapper, "create_datetime", false); + } + + public Vip getById(int id) { + return vipMapper.selectById(id); + } + + /** + * 根据名称 手机号 身份证搜索vip + * @param keyword + * @return + */ + public List search(String keyword) { + QueryWrapper query = new QueryWrapper<>(); + query.like("real_name", keyword); + query.or().like("phone", keyword); + query.or().like("id_code", keyword); + return vipMapper.selectList(query); + } + + /** + * 改变vip等级 + * @param vipId + * @param levelId + */ + public void changeLevel(int vipId, int levelId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("level_id", levelId); + VipLevelConfig levelConfig = vipLevelConfigMapper.selectOne(queryWrapper); + if (levelConfig == null) { + throw new MessageException("等级不存在"); + } + Vip vip = vipMapper.selectById(vipId); + int changeExp = levelConfig.getStartExp() - vip.getExp(); + vipService.changeExp(vipId, changeExp, "会员等级修改"); + } + + /** + * 改变vip积分 + * @param vipId + * @param addIntegral + * @param remark + */ + @Transactional(rollbackFor = Exception.class) + public void changeIntegral(int vipId, int addIntegral, String remark) { + Vip vip = vipMapper.selectById(vipId); + if(vip==null){ + throw new MessageException("会员不存在"); + } + Integer beforeIntegral = vip.getIntegralBalance(); + Integer finalIntegral = beforeIntegral + addIntegral; + Vip updateVip = new Vip(); + updateVip.setId(vipId); + updateVip.setIntegralBalance(finalIntegral); + vipMapper.updateById(updateVip); + //记录日志 + VipIntegralLog vipIntegralLog = new VipIntegralLog(); + vipIntegralLog.setBeforeIntegral(beforeIntegral); + vipIntegralLog.setAfterIntegral(finalIntegral); + vipIntegralLog.setChangeIntegral(addIntegral); + vipIntegralLog.setRemark(remark); + vipIntegralLog.setCreateTime(LocalDateTime.now()); + vipIntegralLog.setVipId(vipId); + vipIntegralLogMapper.insert(vipIntegralLog); + } + + /** + * 刷新所有vip等级信息 + */ + public void reFreshAllVipLevel() { + //更新所有vip的等级 + QueryWrapper vipQuery = new QueryWrapper<>(); + vipQuery.select("id,exp"); + List vipList = vipMapper.selectList(vipQuery); + Iterator iterator = vipList.iterator(); + while (iterator.hasNext()) { + Vip vip = iterator.next(); + VipLevelConfig levelConfig = vipLevelConfigService.getByExp(vip.getExp()); + if (levelConfig != null) { + vip.setLevelId(levelConfig.getLevelId()); + } else { + vip.setLevelId(0); + } + vip.setExp(null); + + } + vipMapper.updateById(vipList); + } +} diff --git a/src/main/resources/xml/VipExpLogMapper.xml b/src/main/resources/xml/VipExpLogMapper.xml new file mode 100644 index 0000000..0bcd2cb --- /dev/null +++ b/src/main/resources/xml/VipExpLogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/VipIntegralLogMapper.xml b/src/main/resources/xml/VipIntegralLogMapper.xml new file mode 100644 index 0000000..fe01445 --- /dev/null +++ b/src/main/resources/xml/VipIntegralLogMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/VipLevelConfigMapper.xml b/src/main/resources/xml/VipLevelConfigMapper.xml new file mode 100644 index 0000000..0b81953 --- /dev/null +++ b/src/main/resources/xml/VipLevelConfigMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/xml/VipMapper.xml b/src/main/resources/xml/VipMapper.xml new file mode 100644 index 0000000..a737387 --- /dev/null +++ b/src/main/resources/xml/VipMapper.xml @@ -0,0 +1,5 @@ + + + + +