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.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.youlai.boot.admin.service.PointManageService; |
||||
import com.youlai.boot.common.annotation.Log; |
import com.youlai.boot.common.annotation.Log; |
||||
import com.youlai.boot.common.enums.ActionTypeEnum; |
import com.youlai.boot.common.enums.ActionTypeEnum; |
||||
import com.youlai.boot.common.enums.LogModuleEnum; |
import com.youlai.boot.common.enums.LogModuleEnum; |
||||
import com.youlai.boot.common.result.PageResult; |
import com.youlai.boot.common.result.PageResult; |
||||
import com.youlai.boot.common.result.Result; |
import com.youlai.boot.common.result.Result; |
||||
import com.youlai.boot.mini.model.form.AddPointRuleForm; |
import com.youlai.boot.admin.model.form.AddPointRuleForm; |
||||
import com.youlai.boot.mini.model.form.AdjustUserPointForm; |
import com.youlai.boot.admin.model.form.AdjustUserPointForm; |
||||
import com.youlai.boot.mini.model.query.PointAccountQuery; |
import com.youlai.boot.admin.model.query.PointAccountQuery; |
||||
import com.youlai.boot.mini.model.query.PointRecordQuery; |
import com.youlai.boot.mini.model.query.PointRecordQuery; |
||||
import com.youlai.boot.mini.model.query.RulePageQuery; |
import com.youlai.boot.mini.model.query.RulePageQuery; |
||||
import com.youlai.boot.mini.model.vo.PointAccountVO; |
import com.youlai.boot.admin.model.vo.PointAccountVO; |
||||
import com.youlai.boot.mini.model.vo.PointRecordVO; |
import com.youlai.boot.admin.model.vo.PointRecordVO; |
||||
import com.youlai.boot.mini.model.vo.RuleListVO; |
import com.youlai.boot.admin.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 io.swagger.v3.oas.annotations.Operation; |
import io.swagger.v3.oas.annotations.Operation; |
||||
import io.swagger.v3.oas.annotations.tags.Tag; |
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
import lombok.RequiredArgsConstructor; |
import lombok.RequiredArgsConstructor; |
||||
import org.springdoc.core.annotations.ParameterObject; |
import org.springdoc.core.annotations.ParameterObject; |
||||
import org.springframework.security.access.prepost.PreAuthorize; |
|
||||
import org.springframework.web.bind.annotation.*; |
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
|
||||
@Tag(name = "管理端积分服务相关接口") |
@Tag(name = "管理端积分服务相关接口") |
||||
@RestController |
@RestController |
||||
@RequestMapping("/api/v1/mini/admin/point") |
@RequestMapping("/api/v1/admin/point") |
||||
@RequiredArgsConstructor |
@RequiredArgsConstructor |
||||
public class PointAdminController { |
public class PointManageController { |
||||
|
|
||||
private final MiniPointAccountService pointAccountService; |
private final PointManageService pointManageService; |
||||
private final MiniPointRuleService pointRuleService; |
|
||||
private final MiniPointRecordService pointRecordService; |
|
||||
|
|
||||
@Operation(summary = "分页查询用户积分账户") |
@Operation(summary = "分页查询用户积分账户") |
||||
@GetMapping("/accounts") |
@GetMapping("/accounts") |
||||
// @PreAuthorize("@ss.hasPerm('mini:point:account:list')")
|
// @PreAuthorize("@ss.hasPerm('admin:point:account:list')")
|
||||
@Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.LIST) |
@Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.LIST) |
||||
public PageResult<PointAccountVO> pageAccount(PointAccountQuery query) { |
public PageResult<PointAccountVO> pageAccount(PointAccountQuery query) { |
||||
return PageResult.success(pointAccountService.pageAccount(query)); |
return PageResult.success(pointManageService.pageAccount(query)); |
||||
} |
} |
||||
|
|
||||
@Operation(summary = "查询积分规则列表") |
@Operation(summary = "查询积分规则列表") |
||||
@GetMapping |
@GetMapping |
||||
// @PreAuthorize("@ss.hasPerm('mini:point:rule:list')")
|
// @PreAuthorize("@ss.hasPerm('admin:point:rule:list')")
|
||||
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.LIST) |
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.LIST) |
||||
public PageResult<RuleListVO> page(@ParameterObject RulePageQuery queryParams) { |
public PageResult<RuleListVO> page(@ParameterObject RulePageQuery queryParams) { |
||||
IPage<RuleListVO> result = pointRuleService.pageRule(queryParams); |
IPage<RuleListVO> result = pointManageService.pageRule(queryParams); |
||||
return PageResult.success(result); |
return PageResult.success(result); |
||||
} |
} |
||||
|
|
||||
@Operation(summary = "新增积分规则") |
@Operation(summary = "新增积分规则") |
||||
@PostMapping("/add/rules") |
@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) |
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.INSERT) |
||||
public Result<Void> addRule(@RequestBody AddPointRuleForm form) { |
public Result<Void> addRule(@RequestBody AddPointRuleForm form) { |
||||
pointRuleService.addRule(form); |
pointManageService.addRule(form); |
||||
return Result.success(); |
return Result.success(); |
||||
} |
} |
||||
|
|
||||
@Operation(summary = "逻辑删除积分规则") |
@Operation(summary = "逻辑删除积分规则") |
||||
@PostMapping("/delete/rules") |
@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) |
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.DELETE) |
||||
public Result<Void> deleteRule(@RequestParam Long id) { |
public Result<Void> deleteRule(@RequestParam Long id) { |
||||
pointRuleService.deleteRule(id); |
pointManageService.deleteRule(id); |
||||
return Result.success(); |
return Result.success(); |
||||
} |
} |
||||
|
|
||||
@Operation(summary = "启用/禁用积分规则") |
@Operation(summary = "启用/禁用积分规则") |
||||
@PatchMapping("/rules/{id}/status") |
@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) |
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.ENABLE) |
||||
public Result<Void> changeRuleStatus(@PathVariable Long id, @RequestParam Boolean status) { |
public Result<Void> changeRuleStatus(@PathVariable Long id, @RequestParam Boolean status) { |
||||
pointRuleService.changeStatus(id, status); |
pointManageService.changeStatus(id, status); |
||||
return Result.success(); |
return Result.success(); |
||||
} |
} |
||||
|
|
||||
@Operation(summary = "手动调整用户积分") |
@Operation(summary = "手动调整用户积分") |
||||
@PutMapping("/adjustPoint") |
@PutMapping("/adjustPoint") |
||||
// @PreAuthorize("@ss.hasPerm('mini:point:record:edit')")
|
// @PreAuthorize("@ss.hasPerm('admin:point:record:edit')")
|
||||
@Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.UPDATE) |
@Log(module = LogModuleEnum.POINT_ACCOUNT, value = ActionTypeEnum.UPDATE) |
||||
public Result<Void> adjustPoint(@RequestBody AdjustUserPointForm adjustUserPointForm) { |
public Result<Void> adjustPoint(@RequestBody AdjustUserPointForm adjustUserPointForm) { |
||||
pointRecordService.adjustPoint(adjustUserPointForm); |
pointManageService.adjustPoint(adjustUserPointForm); |
||||
return Result.success(); |
return Result.success(); |
||||
} |
} |
||||
|
|
||||
@Operation(summary = "分页查询所有积分记录") |
@Operation(summary = "分页查询所有积分记录") |
||||
@GetMapping("/records") |
@GetMapping("/records") |
||||
// @PreAuthorize("@ss.hasPerm('mini:point:record:list')")
|
// @PreAuthorize("@ss.hasPerm('admin:point:record:list')")
|
||||
@Log(module = LogModuleEnum.POINT_RECORD, value = ActionTypeEnum.LIST) |
@Log(module = LogModuleEnum.POINT_RECORD, value = ActionTypeEnum.LIST) |
||||
public PageResult<PointRecordVO> pageRecord(PointRecordQuery query) { |
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 io.swagger.v3.oas.annotations.media.Schema; |
||||
import jakarta.validation.constraints.NotBlank; |
import jakarta.validation.constraints.NotBlank; |
||||
import jakarta.validation.constraints.NotEmpty; |
|
||||
import jakarta.validation.constraints.NotNull; |
import jakarta.validation.constraints.NotNull; |
||||
import lombok.Getter; |
import lombok.Getter; |
||||
import lombok.Setter; |
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 io.swagger.v3.oas.annotations.media.Schema; |
||||
import jakarta.validation.constraints.NotBlank; |
import jakarta.validation.constraints.NotBlank; |
||||
import jakarta.validation.constraints.NotNull; |
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 com.youlai.boot.common.base.BaseQuery; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
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 com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
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 com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
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 com.fasterxml.jackson.annotation.JsonFormat; |
||||
import io.swagger.v3.oas.annotations.media.Schema; |
import io.swagger.v3.oas.annotations.media.Schema; |
||||
import lombok.Builder; |
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; |
package com.youlai.boot.mini.service; |
||||
|
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
||||
import com.baomidou.mybatisplus.extension.service.IService; |
import com.baomidou.mybatisplus.extension.service.IService; |
||||
import com.youlai.boot.mini.model.entity.MiniPointAccount; |
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.MyPointVO; |
||||
import com.youlai.boot.mini.model.vo.PointAccountVO; |
|
||||
|
|
||||
public interface MiniPointAccountService extends IService<MiniPointAccount> { |
public interface MiniPointAccountService extends IService<MiniPointAccount> { |
||||
|
|
||||
IPage<PointAccountVO> pageAccount(PointAccountQuery queryParams); |
|
||||
|
|
||||
MyPointVO getUserPoint(Long userId); |
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