package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.model.UserPoint;
import com.ruoyi.account.service.AppUserService;
import com.ruoyi.account.service.UserPointService;
import com.ruoyi.account.vo.UserPointDetailVO;
import com.ruoyi.account.vo.UserPointStatistics;
import com.ruoyi.account.vo.UserPointVO;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.poi.ExcelUtil;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.YearMonth;
import java.util.List;
/**
*
* 前端控制器
*
*
* @author luodangjia
* @since 2024-11-21
*/
@RestController
@RequestMapping("/user-point")
@Api(tags = "个人积分")
public class UserPointController extends BaseController {
@Resource
private UserPointService userPointService;
@Resource
private AppUserService appUserService;
@Resource
private TokenService tokenService;
/**
* 获取个人积分
*/
@GetMapping("/getUserPoint")
@ApiOperation("获取个人积分")
public R getUserPoint() {
return R.ok(userPointService.getUserPoint(SecurityUtils.getUserId()));
}
/**
* 获取变更明细
*/
@GetMapping("/getUserPointDetail")
@ApiOperation("获取变更明细")
public TableDataInfo getUserPointDetail(@ApiParam("指定日期") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date,
@ApiParam("变动类型(1=消费积分,2=返佣积分,3=拉新人积分,4=兑换商品 " +
"5 = 门店业绩积分 6 =门店返佣积分7=技师业绩积分8 =转赠积分 9 =做工积分 " +
"10 =注册积分)") Integer type) {
LocalDateTime startTime = null;
LocalDateTime endTime = null;
if (date != null) {
// 将 createTime 设置为当天的开始时间 (00:00)
startTime = date.atStartOfDay();
// 使用 YearMonth 来获取该月的最后一天
YearMonth yearMonth = YearMonth.from(date);
LocalDate lastDayOfMonth = yearMonth.atEndOfMonth();
// 将最后一天转换为 LocalDateTime,并设置为当天的最后一秒 (23:59:59.999)
endTime = lastDayOfMonth.atTime(LocalTime.MAX);
}
startPage();
List list = userPointService.getUserPointDetail(SecurityUtils.getUserId(), startTime, endTime, type);
return getDataTable(list);
}
/**
* 转赠积分
*/
@PostMapping("/transferPoint")
@ApiOperation("转赠积分")
public R transferPoint(@ApiParam("积分") @RequestParam BigDecimal point, @ApiParam("手机号") @RequestParam String phone) {
userPointService.transferPoint(point, phone);
return R.ok();
}
/**
* 保存积分流水记录
*
* @param userPoint
* @return
*/
@PostMapping("/saveUserPoint")
public R saveUserPoint(@RequestBody UserPoint userPoint) {
userPointService.save(userPoint);
return R.ok();
}
/**
* 积分统计
*/
@GetMapping("/statistics")
@ApiOperation(value = "积分统计", tags = "管理后台-财务统计-用户积分统计")
public R statistics(UserPoint userPoint) {
return R.ok(userPointService.getStatistics(userPoint));
}
/**
* 变更记录
*/
@GetMapping("/list")
@ApiOperation(value = "积分变更记录", tags = "管理后台-财务统计-用户积分统计")
public R> list(UserPoint userPoint) {
IPage userPointPage = userPointService.getUserPointPage(Page.of(userPoint.getPageNum(), userPoint.getPageSize()), userPoint);
return R.ok(userPointPage);
}
/**
* 导出
*/
@GetMapping("/export")
@ApiOperation(value = "积分变更记录导出", tags = "管理后台-财务统计-用户积分统计")
public void export(HttpServletResponse response, UserPoint userPoint) {
IPage userPointPage = userPointService.getUserPointPage(Page.of(1, Integer.MAX_VALUE), userPoint);
List userPointList = userPointPage.getRecords();
ExcelUtil util = new ExcelUtil<>(UserPoint.class);
util.exportExcel(response, userPointList, "用户积分统计");
}
}