add 积分系统功能

This commit is contained in:
Guoqs
2025-12-24 15:41:11 +08:00
parent c2a1ae1966
commit e135db56b0
11 changed files with 917 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
package com.jsowell.web.controller.pile;
import com.github.pagehelper.PageHelper;
import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.core.domain.AjaxResult;
import com.jsowell.common.core.page.TableDataInfo;
import com.jsowell.pile.domain.MemberPointsInfo;
import com.jsowell.pile.domain.MemberPointsRecord;
import com.jsowell.pile.service.MemberPointsInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
/**
* 会员积分Controller
*
* @author jsowell
*/
@Api(tags = "会员积分管理")
@RestController
@RequestMapping("/points")
public class MemberPointsInfoController extends BaseController {
@Autowired
private MemberPointsInfoService memberPointsInfoService;
/**
* 查询个人积分余额
*/
@ApiOperation("查询个人积分余额")
@PreAuthorize("@ss.hasPermi('member:points:query')")
@GetMapping("/balance")
public AjaxResult getBalance(@ApiParam(value = "会员ID", required = true) @RequestParam String memberId) {
try {
MemberPointsInfo pointsInfo = memberPointsInfoService.selectByMemberId(memberId);
if (pointsInfo == null) {
pointsInfo = MemberPointsInfo.builder()
.memberId(memberId)
.totalPoints(BigDecimal.ZERO)
.build();
}
return AjaxResult.success(pointsInfo);
} catch (Exception e) {
logger.error("查询积分余额失败memberId: {}", memberId, e);
return AjaxResult.error("查询积分余额失败");
}
}
/**
* 查询积分明细列表
*/
@ApiOperation("查询积分明细列表")
@PreAuthorize("@ss.hasPermi('member:points:list')")
@GetMapping("/list")
public TableDataInfo list(
@ApiParam(value = "会员ID", required = true) @RequestParam String memberId,
@ApiParam(value = "页码") @RequestParam(defaultValue = "1") Integer pageNum,
@ApiParam(value = "每页数量") @RequestParam(defaultValue = "10") Integer pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<MemberPointsRecord> list = memberPointsInfoService.getPointsRecordList(memberId);
return getDataTable(list);
}
/**
* 增加积分(充电奖励)
*/
@ApiOperation("增加积分(充电奖励)")
@PreAuthorize("@ss.hasPermi('member:points:add')")
@PostMapping("/add")
public AjaxResult addPoints(
@ApiParam(value = "会员ID", required = true) @RequestParam String memberId,
@ApiParam(value = "积分数量", required = true) @RequestParam BigDecimal points,
@ApiParam(value = "关联订单号") @RequestParam(required = false) String orderCode) {
try {
boolean result = memberPointsInfoService.addPoints(memberId, points, orderCode);
if (result) {
return AjaxResult.success("积分增加成功");
} else {
return AjaxResult.error("积分增加失败");
}
} catch (Exception e) {
logger.error("增加积分失败memberId: {}, points: {}", memberId, points, e);
return AjaxResult.error(e.getMessage());
}
}
/**
* 扣减积分(消费抵扣)
*/
@ApiOperation("扣减积分(消费抵扣)")
@PreAuthorize("@ss.hasPermi('member:points:deduct')")
@PostMapping("/deduct")
public AjaxResult deductPoints(
@ApiParam(value = "会员ID", required = true) @RequestParam String memberId,
@ApiParam(value = "积分数量", required = true) @RequestParam BigDecimal points,
@ApiParam(value = "关联订单号") @RequestParam(required = false) String orderCode) {
try {
boolean result = memberPointsInfoService.deductPoints(memberId, points, orderCode);
if (result) {
return AjaxResult.success("积分扣减成功");
} else {
return AjaxResult.error("积分扣减失败");
}
} catch (Exception e) {
logger.error("扣减积分失败memberId: {}, points: {}", memberId, points, e);
return AjaxResult.error(e.getMessage());
}
}
/**
* 初始化会员积分账户
*/
@ApiOperation("初始化会员积分账户")
@PreAuthorize("@ss.hasPermi('member:points:init')")
@PostMapping("/init")
public AjaxResult initMemberPoints(
@ApiParam(value = "会员ID", required = true) @RequestParam String memberId) {
try {
// 检查是否已存在
MemberPointsInfo existInfo = memberPointsInfoService.selectByMemberId(memberId);
if (existInfo != null) {
return AjaxResult.error("该会员积分账户已存在");
}
int result = memberPointsInfoService.initMemberPoints(memberId);
if (result > 0) {
return AjaxResult.success("积分账户初始化成功");
} else {
return AjaxResult.error("积分账户初始化失败");
}
} catch (Exception e) {
logger.error("初始化积分账户失败memberId: {}", memberId, e);
return AjaxResult.error("初始化积分账户失败");
}
}
}