21 changed files with 447 additions and 46 deletions
@ -0,0 +1,93 @@ |
|||||
|
package com.youlai.boot.mini.controller; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
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.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 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") |
||||
|
@RequiredArgsConstructor |
||||
|
public class PointAdminController { |
||||
|
|
||||
|
private final MiniPointAccountService pointAccountService; |
||||
|
private final MiniPointRuleService pointRuleService; |
||||
|
private final MiniPointRecordService pointRecordService; |
||||
|
|
||||
|
@Operation(summary = "分页查询用户积分账户") |
||||
|
@GetMapping("/accounts") |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:account:list')") |
||||
|
public PageResult<PointAccountVO> pageAccount(PointAccountQuery query) { |
||||
|
return PageResult.success(pointAccountService.pageAccount(query)); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "查询积分规则列表") |
||||
|
@GetMapping |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:rule:list')") |
||||
|
@Log(module = LogModuleEnum.POINT_RULE, value = ActionTypeEnum.LIST) |
||||
|
public PageResult<RuleListVO> page(@ParameterObject RulePageQuery queryParams) { |
||||
|
IPage<RuleListVO> result = pointRuleService.pageRule(queryParams); |
||||
|
return PageResult.success(result); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "新增积分规则") |
||||
|
@PostMapping("/add/rules") |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:rule:add')") |
||||
|
public Result<Void> addRule(@RequestBody AddPointRuleForm form) { |
||||
|
pointRuleService.addRule(form); |
||||
|
return Result.success(); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "删除积分规则") |
||||
|
@PostMapping("/delete/rules") |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:rule:delete')") |
||||
|
public Result<Void> deleteRule(@RequestParam Long id) { |
||||
|
pointRuleService.deleteRule(id); |
||||
|
return Result.success(); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "启用/禁用积分规则") |
||||
|
@PatchMapping("/rules/{id}/status") |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:rule:edit')") |
||||
|
public Result<Void> changeRuleStatus(@PathVariable Long id, @RequestParam Integer status) { |
||||
|
pointRuleService.changeStatus(id, status); |
||||
|
return Result.success(); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "手动调整用户积分") |
||||
|
@PutMapping("/adjustPoint") |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:account:edit')") |
||||
|
public Result<Void> adjustPoint(@RequestBody AdjustUserPointForm adjustUserPointForm) { |
||||
|
pointRecordService.adjustPoint(adjustUserPointForm); |
||||
|
return Result.success(); |
||||
|
} |
||||
|
|
||||
|
@Operation(summary = "分页查询所有积分记录") |
||||
|
@GetMapping("/records") |
||||
|
@PreAuthorize("@ss.hasPerm('mini:point:record:list')") |
||||
|
public PageResult<PointRecordVO> pageRecord(PointRecordQuery query) { |
||||
|
return PageResult.success(pointRecordService.pageAllRecord(query)); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
package com.youlai.boot.mini.converter; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.youlai.boot.mini.model.entity.MiniPointRule; |
||||
|
import com.youlai.boot.mini.model.vo.RuleListVO; |
||||
|
import org.mapstruct.Mapper; |
||||
|
|
||||
|
@Mapper(componentModel = "spring") |
||||
|
public interface MiniPointRuleConverter { |
||||
|
|
||||
|
IPage<RuleListVO> toRulePageVo(Page<MiniPointRule> pageList); |
||||
|
|
||||
|
RuleListVO toRuleVo(MiniPointRule entity); |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,45 @@ |
|||||
|
package com.youlai.boot.mini.model.enums; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonCreator; |
||||
|
import com.fasterxml.jackson.annotation.JsonValue; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
|
||||
|
@Schema(description = "操作用户积分类型") |
||||
|
public enum AdjustUserPointEnum { |
||||
|
|
||||
|
SYSTEM_INCREASE("system_increase", "增加"), |
||||
|
SYSTEM_REDUCE("system_reduce", "减少"); |
||||
|
|
||||
|
private final String value; |
||||
|
private final String desc; |
||||
|
|
||||
|
AdjustUserPointEnum(String value, String desc) { |
||||
|
this.value = value; |
||||
|
this.desc = desc; |
||||
|
} |
||||
|
|
||||
|
@JsonValue |
||||
|
public String getValue() { |
||||
|
return value; |
||||
|
} |
||||
|
|
||||
|
public String getDesc() { |
||||
|
return desc; |
||||
|
} |
||||
|
|
||||
|
@JsonCreator |
||||
|
public static AdjustUserPointEnum from(String value) { |
||||
|
if (value == null) return null; |
||||
|
|
||||
|
for (AdjustUserPointEnum e : values()) { |
||||
|
if (e.value.equalsIgnoreCase(value)) { |
||||
|
return e; |
||||
|
} |
||||
|
} |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
public static boolean contains(String value) { |
||||
|
return from(value) != null; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package com.youlai.boot.mini.model.form; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import jakarta.validation.constraints.NotBlank; |
||||
|
import jakarta.validation.constraints.NotEmpty; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
@Schema(description = "增加积分规则表单对象") |
||||
|
@Getter |
||||
|
@Setter |
||||
|
public class AddPointRuleForm { |
||||
|
|
||||
|
@NotBlank(message = "规则编码不能为空") |
||||
|
@Schema(description = "规则编码", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String ruleCode; |
||||
|
|
||||
|
@NotBlank(message = "规则名称不能为空") |
||||
|
@Schema(description = "规则名称", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String ruleName; |
||||
|
|
||||
|
@NotEmpty(message = "积分不能为空") |
||||
|
@Schema(description = "积分", example = "100", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private Integer point; |
||||
|
|
||||
|
@Schema(description = "限制周期:DAY/WEEK/MONTH/YEAR/ALL(NULL表示无限制)", requiredMode = Schema.RequiredMode.NOT_REQUIRED) |
||||
|
private String limitPeriod; |
||||
|
|
||||
|
@NotEmpty(message = "周期内限制次数不能为空") |
||||
|
@Schema(description = "周期内限制次数", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private Integer limitCount; |
||||
|
|
||||
|
@NotBlank(message = "规则描述不能为空") |
||||
|
@Schema(description = "规则描述", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String description; |
||||
|
} |
||||
@ -0,0 +1,30 @@ |
|||||
|
package com.youlai.boot.mini.model.form; |
||||
|
|
||||
|
import com.youlai.boot.common.annotation.EnumValid; |
||||
|
import com.youlai.boot.mini.model.enums.AdjustUserPointEnum; |
||||
|
import com.youlai.boot.mini.model.enums.AnimalStatusEnum; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import jakarta.validation.constraints.NotBlank; |
||||
|
import jakarta.validation.constraints.NotEmpty; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
@Schema(description = "调整用户积分表单对象") |
||||
|
@Getter |
||||
|
@Setter |
||||
|
public class AdjustUserPointForm { |
||||
|
|
||||
|
@NotBlank(message = "用户id不能为空") |
||||
|
@Schema(description = "用户uuid", example = "abc123", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String uuid; |
||||
|
|
||||
|
@NotEmpty(message = "业务类型不能为空") |
||||
|
@EnumValid(enumClass = AdjustUserPointEnum.class, message = "业务类型不合法") |
||||
|
@Schema(description = "业务类型 system_increase system_reduce", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private String bizType; |
||||
|
|
||||
|
@NotEmpty(message = "积分不能为空") |
||||
|
@Schema(description = "变化值(+增加,-扣减)", requiredMode = Schema.RequiredMode.REQUIRED) |
||||
|
private Integer changeAmount; |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,12 @@ |
|||||
|
package com.youlai.boot.mini.model.query; |
||||
|
|
||||
|
import com.youlai.boot.common.base.BaseQuery; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
@Getter |
||||
|
@Setter |
||||
|
@Schema(description = "用户积分流水查询") |
||||
|
public class PointRecordQuery extends BaseQuery { |
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
package com.youlai.boot.mini.model.query; |
||||
|
|
||||
|
import com.youlai.boot.common.base.BaseQuery; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
@Getter |
||||
|
@Setter |
||||
|
@Schema(description = "积分规则查询") |
||||
|
public class RulePageQuery extends BaseQuery { |
||||
|
|
||||
|
@Schema(description = "规则编码") |
||||
|
private String ruleCode; |
||||
|
|
||||
|
@Schema(description = "规则名称") |
||||
|
private String ruleName; |
||||
|
|
||||
|
@Schema(description = "限制周期") |
||||
|
private String limitPeriod; |
||||
|
|
||||
|
@Schema(description = "状态 0启用 1禁用") |
||||
|
private Integer status; |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
package com.youlai.boot.mini.model.vo; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Builder; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
@Data |
||||
|
@Builder |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@Schema(description = "积分流水列表VO") |
||||
|
public class PointRecordVO { |
||||
|
} |
||||
@ -0,0 +1,65 @@ |
|||||
|
package com.youlai.boot.mini.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; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
@Builder |
||||
|
@EqualsAndHashCode(callSuper = false) |
||||
|
@Schema(description = "积分规则列表VO") |
||||
|
public class RuleListVO { |
||||
|
|
||||
|
@Schema(description = "积分规则表自增id") |
||||
|
private Long id; |
||||
|
|
||||
|
@Schema(description = "积分规则表uuid") |
||||
|
private String uuid; |
||||
|
|
||||
|
@Schema(description = "规则编码") |
||||
|
private String ruleCode; |
||||
|
|
||||
|
@Schema(description = "规则名称") |
||||
|
private String ruleName; |
||||
|
|
||||
|
@Schema(description = "积分值") |
||||
|
private Integer points; |
||||
|
|
||||
|
@Schema(description = "限制周期") |
||||
|
private String limitPeriod; |
||||
|
|
||||
|
@Schema(description = "周期内容限制次数") |
||||
|
private Integer limitCount; |
||||
|
|
||||
|
@Schema(description = "状态 0启用 1禁用") |
||||
|
private Integer status; |
||||
|
|
||||
|
@Schema(description = "规则描述") |
||||
|
private String description; |
||||
|
|
||||
|
@Schema(description = "创建时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date createTime; |
||||
|
|
||||
|
@Schema(description = "创建时间毫秒级时间戳") |
||||
|
private Long createTimestamp; |
||||
|
|
||||
|
@Schema(description = "创建人ID") |
||||
|
private Long createBy; |
||||
|
|
||||
|
@Schema(description = "更新时间") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") |
||||
|
private Date updateTime; |
||||
|
|
||||
|
@Schema(description = "更新时间毫秒级时间戳") |
||||
|
private Long updateTimestamp; |
||||
|
|
||||
|
@Schema(description = "修改人ID") |
||||
|
private Long updateBy; |
||||
|
|
||||
|
} |
||||
@ -0,0 +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.PointAccountVO; |
||||
|
|
||||
|
public interface MiniPointAccountService extends IService<MiniPointAccount> { |
||||
|
IPage<PointAccountVO> page(PointAccountQuery queryParams); |
||||
|
} |
||||
@ -0,0 +1,4 @@ |
|||||
|
package com.youlai.boot.mini.service; |
||||
|
|
||||
|
public interface MiniPointRecordService { |
||||
|
} |
||||
@ -0,0 +1,9 @@ |
|||||
|
package com.youlai.boot.mini.service; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.youlai.boot.mini.model.query.RulePageQuery; |
||||
|
import com.youlai.boot.mini.model.vo.RuleListVO; |
||||
|
|
||||
|
public interface MiniPointRuleService { |
||||
|
IPage<RuleListVO> pageRule(RulePageQuery queryParams); |
||||
|
} |
||||
@ -1,12 +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.MiniPointAccount; |
|
||||
import com.youlai.boot.mini.model.form.UserPointQuery; |
|
||||
import com.youlai.boot.mini.model.vo.UserPointVO; |
|
||||
import com.youlai.boot.system.model.entity.Config; |
|
||||
|
|
||||
public interface PointService extends IService<MiniPointAccount> { |
|
||||
IPage<UserPointVO> page(UserPointQuery queryParams); |
|
||||
} |
|
||||
@ -0,0 +1,15 @@ |
|||||
|
package com.youlai.boot.mini.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import com.youlai.boot.mini.mapper.MiniPointRecordMapper; |
||||
|
import com.youlai.boot.mini.model.entity.MiniPointRecord; |
||||
|
import com.youlai.boot.mini.service.MiniPointRecordService; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
@Service |
||||
|
@RequiredArgsConstructor |
||||
|
@Slf4j |
||||
|
public class MiniPointRecordServiceImpl extends ServiceImpl<MiniPointRecordMapper, MiniPointRecord> implements MiniPointRecordService { |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
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.mini.converter.MiniPointAccountConverter; |
||||
|
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.MiniPointRule; |
||||
|
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; |
||||
|
|
||||
|
@Service |
||||
|
@RequiredArgsConstructor |
||||
|
@Slf4j |
||||
|
public class MiniPointRuleServiceImpl extends ServiceImpl<MiniPointRuleMapper, MiniPointRule> implements MiniPointRuleService { |
||||
|
|
||||
|
private final MiniPointAccountMapper miniPointAccountMapper; |
||||
|
private final MiniPointRecordMapper miniPointRecordMapper; |
||||
|
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> query = new LambdaQueryWrapper<MiniPointRule>(); |
||||
|
query.eq(StringUtil.isNotBlank(queryParams.getRuleCode()),MiniPointRule::getRuleCode, queryParams.getRuleCode()); |
||||
|
query.like(StringUtil.isNotBlank(queryParams.getRuleName()),MiniPointRule::getRuleCode, queryParams.getRuleCode()); |
||||
|
Page<MiniPointRule> pageList = this.page(page, query); |
||||
|
return miniPointRuleConverter.toRulePageVo(pageList); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
Loading…
Reference in new issue