This commit is contained in:
LiJianZhao 2025-04-27 11:28:53 +08:00
parent 63bacfbc0e
commit fda497925e
19 changed files with 968 additions and 0 deletions

View File

@ -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;
/**
* <p>
* 商品 前端控制器
* </p>
*
* @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<Object> create() {
Vip vip = parmsUtil.getObject("vipInfo", Vip.class);
vipService.create(vip);
return success();
}
@RequestMapping("/update")
public Result<Object> update() {
Vip vip = parmsUtil.getObject("vip", Vip.class);
vipService.update(vip);
return success();
}
@RequestMapping("/delete")
public Result<Integer> delete() {
int vipId = parmsUtil.getInteger("id", "ID不能为空");
return success(vipService.removeById(vipId));
}
@RequestMapping("/list")
public Result<Page<Vip>> selectList() {
String keyword = parmsUtil.getString("keyword");
int page = parmsUtil.getInteger("page", "请输入页码");
int pageSize = parmsUtil.getInteger("pageSize", "请输入每页条数");
Page<Vip> list = vipService.pageList(keyword, page, pageSize);
return success(list);
}
@RequestMapping("/get")
public Result<Vip> get() {
int id = parmsUtil.getInteger("id", "ID不能为空");
Vip vip = vipService.getById(id);
return success(vip);
}
@RequestMapping("/search")
public Result<List<Vip>> search() {
String keyword = parmsUtil.getString("keyword", "关键字不能为空");
List<Vip> 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();
}
}

View File

@ -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<Page<VipIntegralLog>> listByVipId(){
VipIntegralLogQuery query = parmsUtil.getObject("query", VipIntegralLogQuery.class);
Page<VipIntegralLog> page = vipIntegralLogService.pageList(query);
return success(page);
}
}

View File

@ -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;
/**
* <p>
* 商品 前端控制器
* </p>
*
* @author NiuZiYuan
* @since 2025-02-21
*/
@RestController
@RequestMapping("/vip/vipLevel")
public class VipLevelConfigController extends BaseController {
@Autowired
private VipLevelConfigService vipLevelConfigService;
@RequestMapping("/create")
public Result<Object> create() {
VipLevelConfig levelConfig = parmsUtil.getObject("vipLevelConfig", VipLevelConfig.class);
vipLevelConfigService.create(levelConfig);
return success();
}
@RequestMapping("/edit")
public Result<Object> edit() {
VipLevelConfig levelConfig = parmsUtil.getObject("vipLevelConfig", VipLevelConfig.class);
vipLevelConfigService.update(levelConfig);
return success();
}
@RequestMapping("/save")
@Transactional
public Result<Object> save() {
List<VipLevelConfig> levelConfigList = parmsUtil.getList("vipLevelConfig", VipLevelConfig.class);
vipLevelConfigService.save(levelConfigList);
return success();
}
@RequestMapping("/delete")
@Transactional(rollbackFor = Exception.class)
public Result<Object> delete() {
int id = parmsUtil.getInteger("id", "ID不能为空");
vipLevelConfigService.delete(id);
return success();
}
@RequestMapping("/list")
public Result<List<VipLevelConfig>> selectList() {
List<VipLevelConfig> list = vipLevelConfigService.list();
return success(list);
}
@RequestMapping("/get")
public Result<VipLevelConfig> get() {
int levelId = parmsUtil.getInteger("levelId", "ID不能为空");
VipLevelConfig level = vipLevelConfigService.getByLevelId(levelId);
return success(level);
}
}

View File

@ -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;
/**
* <p>
*
* </p>
*
* @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;
}

View File

@ -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;
/**
* <p>
*
* </p>
*
* @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;
}

View File

@ -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;
/**
* <p>
*
* </p>
*
* @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;
}

View File

@ -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;
/**
* <p>
*
* </p>
*
* @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;
}

View File

@ -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;
}

View File

@ -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;
/**
* <p>
* Mapper 接口
* </p>
*
* @author NiuZiYuan
* @since 2025-04-27
*/
public interface VipExpLogMapper extends BaseMapper<VipExpLog> {
}

View File

@ -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;
/**
* <p>
* Mapper 接口
* </p>
*
* @author NiuZiYuan
* @since 2025-04-27
*/
public interface VipIntegralLogMapper extends BaseMapper<VipIntegralLog> {
}

View File

@ -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;
/**
* <p>
* Mapper 接口
* </p>
*
* @author NiuZiYuan
* @since 2025-04-27
*/
public interface VipLevelConfigMapper extends BaseMapper<VipLevelConfig> {
}

View File

@ -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;
/**
* <p>
* Mapper 接口
* </p>
*
* @author NiuZiYuan
* @since 2025-04-27
*/
public interface VipMapper extends BaseMapper<Vip> {
}

View File

@ -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<VipIntegralLog> 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<VipIntegralLog> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("vip_id",query.getVipId());
return pageHelper(query.getPageNum(), query.getPageSize(), queryWrapper, vipIntegralLogMapper, "create_time", false);
}
}

View File

@ -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<VipLevelConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.le("start_exp",exp);
queryWrapper.orderByDesc("start_exp");
List<VipLevelConfig> 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<VipLevelConfig> 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<VipLevelConfig> list =vipLevelConfigMapper.selectList(null);
for (int i=0;i<list.size();i++){
VipLevelConfig vipLevelConfig = list.get(i);
UpdateWrapper<VipLevelConfig> 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<VipLevelConfig> 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<VipLevelConfig> list =vipLevelConfigMapper.selectList(null);
for (int i=0;i<list.size();i++){
VipLevelConfig vipLevelConfig = list.get(i);
UpdateWrapper<VipLevelConfig> 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<VipLevelConfig> levelConfigList) {
List<VipLevelConfig> insertList = new ArrayList<>();
for (int i =0 ; i <levelConfigList.size() ; i++){
VipLevelConfig levelConfig = levelConfigList.get(i);
levelConfig.setLevelId(i+1);
if (levelConfig.getId() == null){
insertList.add(levelConfig);
}else {
vipLevelConfigMapper.updateById(levelConfig);
}
}
for (VipLevelConfig levelConfig : insertList){
vipLevelConfigMapper.insert(levelConfig);
}
vipService.reFreshAllVipLevel();
}
@Transactional(rollbackFor = Exception.class)
public Integer delete(int id) {
Integer count = vipLevelConfigMapper.deleteById(id);
vipService.reFreshAllVipLevel();
return count;
}
/**
* 所有vip等级配置的列表
* @return
*/
public List<VipLevelConfig> list() {
QueryWrapper<VipLevelConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("level_id");
return vipLevelConfigMapper.selectList(queryWrapper);
}
/**
* 根据levelId获取等级配置
* @param levelId
* @return
*/
public VipLevelConfig getByLevelId(Integer levelId) {
QueryWrapper<VipLevelConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("level_id", levelId);
return vipLevelConfigMapper.selectOne(queryWrapper);
}
}

View File

@ -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<VipLevelConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("start_exp");
List<VipLevelConfig> 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<Vip> 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<Vip> pageList(String keyword, int pageNum, int pageSize) {
QueryWrapper<Vip> 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<Vip> search(String keyword) {
QueryWrapper<Vip> 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<VipLevelConfig> 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<Vip> vipQuery = new QueryWrapper<>();
vipQuery.select("id,exp");
List<Vip> vipList = vipMapper.selectList(vipQuery);
Iterator<Vip> 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);
}
}

View File

@ -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="com.syjiaer.clinic.server.mapper.vip.VipExpLogMapper">
</mapper>

View File

@ -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="com.syjiaer.clinic.server.mapper.vip.VipIntegralLogMapper">
</mapper>

View File

@ -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="com.syjiaer.clinic.server.mapper.vip.VipLevelConfigMapper">
</mapper>

View File

@ -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="com.syjiaer.clinic.server.mapper.vip.VipMapper">
</mapper>