25 changed files with 281 additions and 325 deletions
@ -1,99 +1,94 @@ |
|||
package com.youlai.boot.mini.controller; |
|||
package com.youlai.boot.admin.controller; |
|||
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.youlai.boot.admin.service.PointManageService; |
|||
import com.youlai.boot.common.annotation.Log; |
|||
import com.youlai.boot.common.enums.ActionTypeEnum; |
|||
import com.youlai.boot.common.enums.LogModuleEnum; |
|||
import com.youlai.boot.common.result.PageResult; |
|||
import com.youlai.boot.common.result.Result; |
|||
import com.youlai.boot.mini.model.form.AddPointRuleForm; |
|||
import com.youlai.boot.mini.model.form.AdjustUserPointForm; |
|||
import com.youlai.boot.mini.model.query.PointAccountQuery; |
|||
import com.youlai.boot.admin.model.form.AddPointRuleForm; |
|||
import com.youlai.boot.admin.model.form.AdjustUserPointForm; |
|||
import com.youlai.boot.admin.model.query.PointAccountQuery; |
|||
import com.youlai.boot.mini.model.query.PointRecordQuery; |
|||
import com.youlai.boot.mini.model.query.RulePageQuery; |
|||
import com.youlai.boot.mini.model.vo.PointAccountVO; |
|||
import com.youlai.boot.mini.model.vo.PointRecordVO; |
|||
import com.youlai.boot.mini.model.vo.RuleListVO; |
|||
import com.youlai.boot.mini.service.MiniPointAccountService; |
|||
import com.youlai.boot.mini.service.MiniPointRecordService; |
|||
import com.youlai.boot.mini.service.MiniPointRuleService; |
|||
import com.youlai.boot.admin.model.vo.PointAccountVO; |
|||
import com.youlai.boot.admin.model.vo.PointRecordVO; |
|||
import com.youlai.boot.admin.model.vo.RuleListVO; |
|||
import io.swagger.v3.oas.annotations.Operation; |
|||
import io.swagger.v3.oas.annotations.tags.Tag; |
|||
import lombok.RequiredArgsConstructor; |
|||
import org.springdoc.core.annotations.ParameterObject; |
|||
import org.springframework.security.access.prepost.PreAuthorize; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
|
|||
@Tag(name = "管理端积分服务相关接口") |
|||
@RestController |
|||
@RequestMapping("/api/v1/mini/admin/point") |
|||
@RequestMapping("/api/v1/admin/point") |
|||
@RequiredArgsConstructor |
|||
public class PointAdminController { |
|||
public class PointManageController { |
|||
|
|||
private final MiniPointAccountService pointAccountService; |
|||
private final MiniPointRuleService pointRuleService; |
|||
private final MiniPointRecordService pointRecordService; |
|||
private final PointManageService pointManageService; |
|||
|
|||
@Operation(summary = "分页查询用户积分账户") |
|||
@GetMapping("/accounts") |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:account:list')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:account:list')")
|
|||
@Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.LIST) |
|||
public PageResult<PointAccountVO> pageAccount(PointAccountQuery query) { |
|||
return PageResult.success(pointAccountService.pageAccount(query)); |
|||
return PageResult.success(pointManageService.pageAccount(query)); |
|||
} |
|||
|
|||
@Operation(summary = "查询积分规则列表") |
|||
@GetMapping |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:rule:list')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:rule:list')")
|
|||
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.LIST) |
|||
public PageResult<RuleListVO> page(@ParameterObject RulePageQuery queryParams) { |
|||
IPage<RuleListVO> result = pointRuleService.pageRule(queryParams); |
|||
IPage<RuleListVO> result = pointManageService.pageRule(queryParams); |
|||
return PageResult.success(result); |
|||
} |
|||
|
|||
@Operation(summary = "新增积分规则") |
|||
@PostMapping("/add/rules") |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:rule:add')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:rule:add')")
|
|||
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.INSERT) |
|||
public Result<Void> addRule(@RequestBody AddPointRuleForm form) { |
|||
pointRuleService.addRule(form); |
|||
pointManageService.addRule(form); |
|||
return Result.success(); |
|||
} |
|||
|
|||
@Operation(summary = "逻辑删除积分规则") |
|||
@PostMapping("/delete/rules") |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:rule:delete')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:rule:delete')")
|
|||
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.DELETE) |
|||
public Result<Void> deleteRule(@RequestParam Long id) { |
|||
pointRuleService.deleteRule(id); |
|||
pointManageService.deleteRule(id); |
|||
return Result.success(); |
|||
} |
|||
|
|||
@Operation(summary = "启用/禁用积分规则") |
|||
@PatchMapping("/rules/{id}/status") |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:rule:edit')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:rule:edit')")
|
|||
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.ENABLE) |
|||
public Result<Void> changeRuleStatus(@PathVariable Long id, @RequestParam Boolean status) { |
|||
pointRuleService.changeStatus(id, status); |
|||
pointManageService.changeStatus(id, status); |
|||
return Result.success(); |
|||
} |
|||
|
|||
@Operation(summary = "手动调整用户积分") |
|||
@PutMapping("/adjustPoint") |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:record:edit')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:record:edit')")
|
|||
@Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.UPDATE) |
|||
public Result<Void> adjustPoint(@RequestBody AdjustUserPointForm adjustUserPointForm) { |
|||
pointRecordService.adjustPoint(adjustUserPointForm); |
|||
pointManageService.adjustPoint(adjustUserPointForm); |
|||
return Result.success(); |
|||
} |
|||
|
|||
@Operation(summary = "分页查询所有积分记录") |
|||
@GetMapping("/records") |
|||
// @PreAuthorize("@ss.hasPerm('mini:point:record:list')")
|
|||
// @PreAuthorize("@ss.hasPerm('admin:point:record:list')")
|
|||
@Log(module = LogModuleEnum.POINT_RECORD, value = ActionTypeEnum.LIST) |
|||
public PageResult<PointRecordVO> pageRecord(PointRecordQuery query) { |
|||
return PageResult.success(pointRecordService.pageAllRecord(query)); |
|||
return PageResult.success(pointManageService.pageAllRecord(query)); |
|||
} |
|||
|
|||
} |
|||
@ -1,8 +1,7 @@ |
|||
package com.youlai.boot.mini.model.form; |
|||
package com.youlai.boot.admin.model.form; |
|||
|
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import jakarta.validation.constraints.NotEmpty; |
|||
import jakarta.validation.constraints.NotNull; |
|||
import lombok.Getter; |
|||
import lombok.Setter; |
|||
@ -1,7 +1,5 @@ |
|||
package com.youlai.boot.mini.model.form; |
|||
package com.youlai.boot.admin.model.form; |
|||
|
|||
import com.youlai.boot.common.annotation.EnumValid; |
|||
import com.youlai.boot.mini.model.enums.AdjustUserPointEnum; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import jakarta.validation.constraints.NotBlank; |
|||
import jakarta.validation.constraints.NotNull; |
|||
@ -1,4 +1,4 @@ |
|||
package com.youlai.boot.mini.model.query; |
|||
package com.youlai.boot.admin.model.query; |
|||
|
|||
import com.youlai.boot.common.base.BaseQuery; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
@ -1,4 +1,4 @@ |
|||
package com.youlai.boot.mini.model.vo; |
|||
package com.youlai.boot.admin.model.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
@ -1,4 +1,4 @@ |
|||
package com.youlai.boot.mini.model.vo; |
|||
package com.youlai.boot.admin.model.vo; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
@ -1,6 +1,5 @@ |
|||
package com.youlai.boot.mini.model.vo; |
|||
package com.youlai.boot.admin.model.vo; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.TableField; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Builder; |
|||
@ -0,0 +1,30 @@ |
|||
package com.youlai.boot.admin.service; |
|||
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.service.IService; |
|||
import com.youlai.boot.mini.model.entity.MiniPointRule; |
|||
import com.youlai.boot.admin.model.form.AddPointRuleForm; |
|||
import com.youlai.boot.admin.model.form.AdjustUserPointForm; |
|||
import com.youlai.boot.admin.model.query.PointAccountQuery; |
|||
import com.youlai.boot.mini.model.query.PointRecordQuery; |
|||
import com.youlai.boot.mini.model.query.RulePageQuery; |
|||
import com.youlai.boot.admin.model.vo.PointAccountVO; |
|||
import com.youlai.boot.admin.model.vo.PointRecordVO; |
|||
import com.youlai.boot.admin.model.vo.RuleListVO; |
|||
|
|||
public interface PointManageService extends IService<MiniPointRule> { |
|||
|
|||
IPage<PointAccountVO> pageAccount(PointAccountQuery queryParams); |
|||
|
|||
IPage<RuleListVO> pageRule(RulePageQuery queryParams); |
|||
|
|||
void addRule(AddPointRuleForm form); |
|||
|
|||
void deleteRule(Long id); |
|||
|
|||
void changeStatus(Long id, Boolean status); |
|||
|
|||
void adjustPoint(AdjustUserPointForm form); |
|||
|
|||
IPage<PointRecordVO> pageAllRecord(PointRecordQuery query); |
|||
} |
|||
@ -0,0 +1,192 @@ |
|||
package com.youlai.boot.admin.service.impl; |
|||
|
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import com.youlai.boot.admin.service.PointManageService; |
|||
import com.youlai.boot.common.exception.MsgException; |
|||
import com.youlai.boot.framework.security.util.SecurityUtils; |
|||
import com.youlai.boot.mini.converter.MiniPointRuleConverter; |
|||
import com.youlai.boot.mini.mapper.MiniPointAccountMapper; |
|||
import com.youlai.boot.mini.mapper.MiniPointRecordMapper; |
|||
import com.youlai.boot.mini.mapper.MiniPointRuleMapper; |
|||
import com.youlai.boot.mini.model.entity.MiniPointAccount; |
|||
import com.youlai.boot.mini.model.entity.MiniPointRecord; |
|||
import com.youlai.boot.mini.model.entity.MiniPointRule; |
|||
import com.youlai.boot.admin.model.form.AddPointRuleForm; |
|||
import com.youlai.boot.admin.model.form.AdjustUserPointForm; |
|||
import com.youlai.boot.admin.model.query.PointAccountQuery; |
|||
import com.youlai.boot.mini.model.query.PointRecordQuery; |
|||
import com.youlai.boot.mini.model.query.RulePageQuery; |
|||
import com.youlai.boot.admin.model.vo.PointAccountVO; |
|||
import com.youlai.boot.admin.model.vo.PointRecordVO; |
|||
import com.youlai.boot.admin.model.vo.RuleListVO; |
|||
import com.youlai.boot.mini.service.MiniPointAccountService; |
|||
import jodd.util.StringUtil; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import java.util.Date; |
|||
import java.util.UUID; |
|||
|
|||
@Service |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class PointManageServiceImpl extends ServiceImpl<MiniPointRuleMapper, MiniPointRule> implements PointManageService { |
|||
|
|||
private final MiniPointAccountMapper miniPointAccountMapper; |
|||
private final MiniPointRuleMapper miniPointRuleMapper; |
|||
private final MiniPointRuleConverter miniPointRuleConverter; |
|||
private final MiniPointAccountService miniPointAccountService; |
|||
private final MiniPointRecordMapper miniPointRecordMapper; |
|||
|
|||
@Override |
|||
public IPage<PointAccountVO> pageAccount(PointAccountQuery queryParams) { |
|||
Page<MiniPointAccount> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); |
|||
return miniPointAccountMapper.pageAccount(page, queryParams); |
|||
} |
|||
|
|||
@Override |
|||
public IPage<RuleListVO> pageRule(RulePageQuery queryParams) { |
|||
Page<MiniPointRule> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); |
|||
LambdaQueryWrapper<MiniPointRule> queryWrapper = new LambdaQueryWrapper<>(); |
|||
queryWrapper.eq(StringUtil.isNotBlank(queryParams.getRuleCode()), MiniPointRule::getRuleCode, queryParams.getRuleCode()); |
|||
queryWrapper.like(StringUtil.isNotBlank(queryParams.getRuleName()), MiniPointRule::getRuleName, queryParams.getRuleName()); |
|||
queryWrapper.orderByAsc(MiniPointRule::getCreateTime); |
|||
Page<MiniPointRule> pageList = this.page(page, queryWrapper); |
|||
return miniPointRuleConverter.toRulePageVo(pageList); |
|||
} |
|||
|
|||
@Override |
|||
public void addRule(AddPointRuleForm form) { |
|||
// 校验规则编码是否唯一
|
|||
long count = this.count(new LambdaQueryWrapper<MiniPointRule>() |
|||
.eq(MiniPointRule::getRuleCode, form.getRuleCode()) |
|||
.eq(MiniPointRule::getDeleted, false)); |
|||
if (count > 0) { |
|||
throw new MsgException("规则编码已存在,请修改后重试"); |
|||
} |
|||
|
|||
// 表单转实体
|
|||
MiniPointRule rule = miniPointRuleConverter.toEntity(form); |
|||
|
|||
// 设置默认值
|
|||
rule.setUuid(UUID.randomUUID().toString().replace("-", "")); |
|||
rule.setStatus(false); // 默认启用
|
|||
rule.setCreateBy(SecurityUtils.getUserId()); |
|||
rule.setCreateTime(new Date()); |
|||
rule.setCreateTimestamp(System.currentTimeMillis()); |
|||
|
|||
// 保存
|
|||
this.save(rule); |
|||
} |
|||
|
|||
@Override |
|||
public void deleteRule(Long id) { |
|||
// 校验规则是否存在
|
|||
MiniPointRule rule = this.getById(id); |
|||
if (rule == null || rule.getDeleted()) { |
|||
throw new MsgException("积分规则不存在或已删除"); |
|||
} |
|||
|
|||
// 逻辑删除,设置删除标记和更新信息
|
|||
MiniPointRule updateRule = new MiniPointRule(); |
|||
updateRule.setId(id); |
|||
updateRule.setDeleted(true); |
|||
updateRule.setUpdateBy(SecurityUtils.getUserId()); |
|||
updateRule.setUpdateTime(new Date()); |
|||
updateRule.setUpdateTimestamp(System.currentTimeMillis()); |
|||
|
|||
this.updateById(updateRule); |
|||
} |
|||
|
|||
@Override |
|||
public void changeStatus(Long id, Boolean status) { |
|||
// 1. 非空校验
|
|||
if (status == null) { |
|||
throw new MsgException("状态参数不能为空"); |
|||
} |
|||
|
|||
// 2. 校验规则是否存在且未删除
|
|||
MiniPointRule rule = this.getById(id); |
|||
if (rule == null || rule.getDeleted()) { |
|||
throw new MsgException("积分规则不存在或已删除"); |
|||
} |
|||
|
|||
// 3. 构造更新对象,直接赋值Boolean类型状态
|
|||
MiniPointRule updateRule = new MiniPointRule(); |
|||
updateRule.setId(id); |
|||
updateRule.setStatus(status); // false=启用,true=禁用,自动映射数据库0/1
|
|||
updateRule.setUpdateBy(SecurityUtils.getUserId()); |
|||
updateRule.setUpdateTime(new Date()); |
|||
updateRule.setUpdateTimestamp(System.currentTimeMillis()); |
|||
|
|||
// 4. 执行更新
|
|||
this.updateById(updateRule); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void adjustPoint(AdjustUserPointForm form) { |
|||
// 1. 参数校验:调整值不能为0
|
|||
if (form.getChangeAmount() == null || form.getChangeAmount() == 0) { |
|||
throw new MsgException("积分调整值不能为0"); |
|||
} |
|||
|
|||
// 2.根据用户主键userId查询积分账户
|
|||
MiniPointAccount account = miniPointAccountService.getOne(new LambdaQueryWrapper<MiniPointAccount>() |
|||
.eq(MiniPointAccount::getUserId, form.getUserId()) |
|||
.eq(MiniPointAccount::getDeleted, false)); |
|||
// 账户不存在自动创建,新用户第一次获得积分的时候自动初始化账户
|
|||
if (account == null) { |
|||
account = new MiniPointAccount(); |
|||
account.setUuid(IdUtil.fastSimpleUUID()); |
|||
account.setUserId(form.getUserId()); |
|||
account.setPoints(0); |
|||
account.setCreateBy(form.getUserId()); |
|||
account.setCreateTime(new Date()); |
|||
account.setCreateTimestamp(System.currentTimeMillis()); |
|||
miniPointAccountService.save(account); |
|||
} |
|||
|
|||
// 4. 计算变更后余额,校验不能为负数
|
|||
Integer afterBalance = account.getPoints() + form.getChangeAmount(); |
|||
if (afterBalance < 0) { |
|||
throw new MsgException("积分不足,扣减后余额不能为负数"); |
|||
} |
|||
|
|||
// 5. 更新用户积分账户余额
|
|||
MiniPointAccount updateAccount = new MiniPointAccount(); |
|||
updateAccount.setId(account.getId()); |
|||
updateAccount.setPoints(afterBalance); |
|||
updateAccount.setUpdateBy(SecurityUtils.getUserId()); |
|||
updateAccount.setUpdateTime(new Date()); |
|||
updateAccount.setUpdateTimestamp(System.currentTimeMillis()); |
|||
miniPointAccountService.updateById(updateAccount); |
|||
|
|||
// 6. 插入积分流水记录
|
|||
MiniPointRecord record = new MiniPointRecord(); |
|||
record.setUuid(IdUtil.fastSimpleUUID()); |
|||
record.setUserId(account.getUserId()); |
|||
record.setChangeAmount(form.getChangeAmount()); |
|||
record.setBalanceAfter(afterBalance); |
|||
record.setBizType(form.getBizType()); |
|||
// 优先用传进来的业务唯一ID(比如AI任务ID),没有的话自动生成,保证幂等
|
|||
record.setBizId(StrUtil.isNotBlank(form.getBizId()) ? form.getBizId() : UUID.randomUUID().toString().replace("-", "")); |
|||
record.setCreateBy(SecurityUtils.getUserId()); |
|||
record.setCreateTime(new Date()); |
|||
record.setCreateTimestamp(System.currentTimeMillis()); |
|||
miniPointRecordMapper.insert(record); |
|||
} |
|||
|
|||
@Override |
|||
public IPage<PointRecordVO> pageAllRecord(PointRecordQuery query) { |
|||
Page<MiniPointRecord> page = new Page<>(query.getPageNum(), query.getPageSize()); |
|||
return miniPointRecordMapper.pageAllRecord(page, query); |
|||
} |
|||
} |
|||
@ -1,16 +1,11 @@ |
|||
package com.youlai.boot.mini.service; |
|||
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.service.IService; |
|||
import com.youlai.boot.mini.model.entity.MiniPointAccount; |
|||
import com.youlai.boot.mini.model.query.PointAccountQuery; |
|||
import com.youlai.boot.mini.model.vo.MyPointVO; |
|||
import com.youlai.boot.mini.model.vo.PointAccountVO; |
|||
|
|||
public interface MiniPointAccountService extends IService<MiniPointAccount> { |
|||
|
|||
IPage<PointAccountVO> pageAccount(PointAccountQuery queryParams); |
|||
|
|||
MyPointVO getUserPoint(Long userId); |
|||
|
|||
} |
|||
|
|||
@ -1,29 +0,0 @@ |
|||
package com.youlai.boot.mini.service; |
|||
|
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.service.IService; |
|||
import com.youlai.boot.mini.model.entity.MiniPointRule; |
|||
import com.youlai.boot.mini.model.form.AddPointRuleForm; |
|||
import com.youlai.boot.mini.model.query.RulePageQuery; |
|||
import com.youlai.boot.mini.model.vo.RuleListVO; |
|||
|
|||
public interface MiniPointRuleService extends IService<MiniPointRule> { |
|||
IPage<RuleListVO> pageRule(RulePageQuery queryParams); |
|||
|
|||
/** |
|||
* 新增积分规则 |
|||
*/ |
|||
void addRule(AddPointRuleForm form); |
|||
|
|||
/** |
|||
* 逻辑删除积分规则 |
|||
*/ |
|||
void deleteRule(Long id); |
|||
|
|||
/** |
|||
* 启用/禁用积分规则 |
|||
* @param id 规则ID |
|||
* @param status 状态:false-启用,true-禁用 |
|||
*/ |
|||
void changeStatus(Long id, Boolean status); |
|||
} |
|||
@ -1,112 +0,0 @@ |
|||
package com.youlai.boot.mini.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import com.youlai.boot.common.exception.BusinessException; |
|||
import com.youlai.boot.common.exception.MsgException; |
|||
import com.youlai.boot.framework.security.util.SecurityUtils; |
|||
import com.youlai.boot.mini.converter.MiniPointRuleConverter; |
|||
import com.youlai.boot.mini.mapper.MiniPointRuleMapper; |
|||
import com.youlai.boot.mini.model.entity.MiniPointRule; |
|||
import com.youlai.boot.mini.model.form.AddPointRuleForm; |
|||
import com.youlai.boot.mini.model.query.RulePageQuery; |
|||
import com.youlai.boot.mini.model.vo.RuleListVO; |
|||
import com.youlai.boot.mini.service.MiniPointRuleService; |
|||
import jodd.util.StringUtil; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.Date; |
|||
import java.util.UUID; |
|||
|
|||
@Service |
|||
@RequiredArgsConstructor |
|||
@Slf4j |
|||
public class MiniPointRuleServiceImpl extends ServiceImpl<MiniPointRuleMapper, MiniPointRule> implements MiniPointRuleService { |
|||
|
|||
private final MiniPointRuleMapper miniPointRuleMapper; |
|||
private final MiniPointRuleConverter miniPointRuleConverter; |
|||
|
|||
@Override |
|||
public IPage<RuleListVO> pageRule(RulePageQuery queryParams) { |
|||
Page<MiniPointRule> page = new Page<>(queryParams.getPageNum(), queryParams.getPageSize()); |
|||
LambdaQueryWrapper<MiniPointRule> queryWrapper = new LambdaQueryWrapper<>(); |
|||
queryWrapper.eq(StringUtil.isNotBlank(queryParams.getRuleCode()),MiniPointRule::getRuleCode, queryParams.getRuleCode()); |
|||
queryWrapper.like(StringUtil.isNotBlank(queryParams.getRuleName()),MiniPointRule::getRuleName, queryParams.getRuleName()); |
|||
queryWrapper.orderByAsc(MiniPointRule::getCreateTime); |
|||
Page<MiniPointRule> pageList = this.page(page, queryWrapper); |
|||
return miniPointRuleConverter.toRulePageVo(pageList); |
|||
} |
|||
|
|||
@Override |
|||
public void addRule(AddPointRuleForm form) { |
|||
// 校验规则编码是否唯一
|
|||
long count = this.count(new LambdaQueryWrapper<MiniPointRule>() |
|||
.eq(MiniPointRule::getRuleCode, form.getRuleCode()) |
|||
.eq(MiniPointRule::getDeleted, false)); |
|||
if (count > 0) { |
|||
throw new MsgException("规则编码已存在,请修改后重试"); |
|||
} |
|||
|
|||
// 表单转实体
|
|||
MiniPointRule rule = miniPointRuleConverter.toEntity(form); |
|||
|
|||
// 设置默认值
|
|||
rule.setUuid(UUID.randomUUID().toString().replace("-", "")); |
|||
rule.setStatus(false); // 默认启用
|
|||
rule.setCreateBy(SecurityUtils.getUserId()); |
|||
rule.setCreateTime(new Date()); |
|||
rule.setCreateTimestamp(System.currentTimeMillis()); |
|||
|
|||
// 保存
|
|||
this.save(rule); |
|||
} |
|||
|
|||
@Override |
|||
public void deleteRule(Long id) { |
|||
// 校验规则是否存在
|
|||
MiniPointRule rule = this.getById(id); |
|||
if (rule == null || rule.getDeleted()) { |
|||
throw new MsgException("积分规则不存在或已删除"); |
|||
} |
|||
|
|||
// 逻辑删除,设置删除标记和更新信息
|
|||
MiniPointRule updateRule = new MiniPointRule(); |
|||
updateRule.setId(id); |
|||
updateRule.setDeleted(true); |
|||
updateRule.setUpdateBy(SecurityUtils.getUserId()); |
|||
updateRule.setUpdateTime(new Date()); |
|||
updateRule.setUpdateTimestamp(System.currentTimeMillis()); |
|||
|
|||
this.updateById(updateRule); |
|||
} |
|||
|
|||
@Override |
|||
public void changeStatus(Long id, Boolean status) { |
|||
// 1. 非空校验
|
|||
if (status == null) { |
|||
throw new MsgException("状态参数不能为空"); |
|||
} |
|||
|
|||
// 2. 校验规则是否存在且未删除
|
|||
MiniPointRule rule = this.getById(id); |
|||
if (rule == null || rule.getDeleted()) { |
|||
throw new MsgException("积分规则不存在或已删除"); |
|||
} |
|||
|
|||
// 3. 构造更新对象,直接赋值Boolean类型状态
|
|||
MiniPointRule updateRule = new MiniPointRule(); |
|||
updateRule.setId(id); |
|||
updateRule.setStatus(status); // false=启用,true=禁用,自动映射数据库0/1
|
|||
updateRule.setUpdateBy(SecurityUtils.getUserId()); |
|||
updateRule.setUpdateTime(new Date()); |
|||
updateRule.setUpdateTimestamp(System.currentTimeMillis()); |
|||
|
|||
// 4. 执行更新
|
|||
this.updateById(updateRule); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue