结算记录

This commit is contained in:
chen-xin-zhi 2025-05-10 20:39:25 +08:00
parent 820f1763bd
commit b4c47cfd38
11 changed files with 177 additions and 75 deletions

View File

@ -52,40 +52,37 @@ public class PermissionCheck {
**/
@Around("@annotation(requiresPermission)")
public Object check(ProceedingJoinPoint joinPoint, RequiresPermission requiresPermission) throws Throwable {
// // 获取请求对象
// HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
// // 接口的权限
// String mustRole = requiresPermission.mustRole();
// // 获取接口权限的枚举类
// UserRoleEnum interfaceRoleEnum = UserRoleEnum.getEnumByValue(mustRole);
// ThrowUtils.throwIf(interfaceRoleEnum == null, ErrorCode.NO_AUTH_ERROR);
// // 获取用户权限
// String token = request.getHeader("Authorization");
// ThrowUtils.throwIf(StringUtils.isBlank(token), ErrorCode.NO_AUTH_ERROR, "JWT为空");
// // 解析token
// DecodedJWT decodedJWT = jwtUtils.verify(token);
// String userAccount = decodedJWT.getClaim("userAccount").asString();
// String userPassword = decodedJWT.getClaim("userPassword").asString();
// // 将账号存入request用于记录日志
// request.setAttribute("userAccount", userAccount);
//// // 打印token的过期时间
//// Date expiresAt = decodedJWT.getExpiresAt();
//// String formatExpiresAt = DateUtil.format(expiresAt, "yyyy-MM-dd HH:mm:ss");
//// log.info("Token过期时间为:" + formatExpiresAt);
// LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
// lambdaQueryWrapper.eq(UserInfo::getUserAccount, userAccount).eq(UserInfo::getUserPassword, userPassword);
// UserInfo userInfo = userInfoService.getOne(lambdaQueryWrapper);
// ThrowUtils.throwIf(userInfo == null, ErrorCode.OPERATION_ERROR, "用户不存在");
//
// // 获取用户权限的枚举类
// String userRole = userInfo.getUserRole();
// UserRoleEnum userRoleEnum = UserRoleEnum.getEnumByValue(userRole);
//
// // 接口权限只能是 USERADMINBOSS用户权限是 ADMINBOSSUSERBAN
// // 校验角色
// ThrowUtils.throwIf(UserRoleEnum.USER.equals(userRoleEnum) && !UserRoleEnum.USER.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
// ThrowUtils.throwIf(UserRoleEnum.BAN.equals(userRoleEnum), ErrorCode.NO_AUTH_ERROR, "用户已被封禁");
// ThrowUtils.throwIf(UserRoleEnum.ADMIN.equals(userRoleEnum) && UserRoleEnum.BOSS.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
// 获取请求对象
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
// 接口的权限
String mustRole = requiresPermission.mustRole();
// 获取接口权限的枚举类
UserRoleEnum interfaceRoleEnum = UserRoleEnum.getEnumByValue(mustRole);
ThrowUtils.throwIf(interfaceRoleEnum == null, ErrorCode.NO_AUTH_ERROR);
// 获取用户权限
String token = request.getHeader("Authorization");
ThrowUtils.throwIf(StringUtils.isBlank(token), ErrorCode.NO_AUTH_ERROR, "JWT为空");
// 解析token
DecodedJWT decodedJWT = jwtUtils.verify(token);
String userAccount = decodedJWT.getClaim("userAccount").asString();
String userPassword = decodedJWT.getClaim("userPassword").asString();
// 查询用户信息
LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserInfo::getUserAccount, userAccount).eq(UserInfo::getUserPassword, userPassword);
UserInfo userInfo = userInfoService.getOne(lambdaQueryWrapper);
ThrowUtils.throwIf(userInfo == null, ErrorCode.OPERATION_ERROR, "用户不存在");
// 将用户id存入request用于记录日志
request.setAttribute("userId", userInfo.getId());
// 获取用户权限的枚举类
String userRole = userInfo.getUserRole();
UserRoleEnum userRoleEnum = UserRoleEnum.getEnumByValue(userRole);
// 接口权限只能是 USERADMINBOSS用户权限是 ADMINBOSSUSERBAN
// 校验角色
ThrowUtils.throwIf(UserRoleEnum.USER.equals(userRoleEnum) && !UserRoleEnum.USER.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
ThrowUtils.throwIf(UserRoleEnum.BAN.equals(userRoleEnum), ErrorCode.NO_AUTH_ERROR, "用户已被封禁");
ThrowUtils.throwIf(UserRoleEnum.ADMIN.equals(userRoleEnum) && UserRoleEnum.BOSS.equals(interfaceRoleEnum), ErrorCode.NO_AUTH_ERROR);
return joinPoint.proceed();
}

View File

@ -1,6 +1,6 @@
package com.greenorange.promotion.controller.projectSettlement;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.greenorange.promotion.annotation.RequiresPermission;
import com.greenorange.promotion.annotation.SysLog;
import com.greenorange.promotion.common.BaseResponse;
@ -9,25 +9,28 @@ import com.greenorange.promotion.common.ResultUtils;
import com.greenorange.promotion.constant.UserConstant;
import com.greenorange.promotion.exception.ThrowUtils;
import com.greenorange.promotion.model.dto.CommonBatchRequest;
import com.greenorange.promotion.model.dto.CommonRequest;
import com.greenorange.promotion.model.dto.projectSettlement.ProjectSettlementAddRequest;
import com.greenorange.promotion.model.dto.projectSettlement.ProjectSettlementQueryRequest;
import com.greenorange.promotion.model.dto.projectSettlement.ProjectSettlementUpdateRequest;
import com.greenorange.promotion.model.entity.ProjectSettlement;
import com.greenorange.promotion.model.entity.*;
import com.greenorange.promotion.model.vo.projectSettlement.ProjectSettlementVO;
import com.greenorange.promotion.service.common.CommonService;
import com.greenorange.promotion.service.project.PromoCodeApplyService;
import com.greenorange.promotion.service.settle.FundsChangeService;
import com.greenorange.promotion.service.settle.ProjectSettlementService;
import com.greenorange.promotion.service.user.UserInfoService;
import com.greenorange.promotion.service.user.UserMainInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.greenorange.promotion.model.dto.CommonRequest;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.List;
@ -43,9 +46,18 @@ public class ProjectSettlementController {
@Resource
private ProjectSettlementService projectSettlementService;
@Resource
private FundsChangeService fundsChangeService;
@Resource
private CommonService commonService;
@Resource
private PromoCodeApplyService promoCodeApplyService;
@Resource
private UserMainInfoService userMainInfoService;
/**
* web端管理员添加项目结算记录
* @param projectSettlementAddRequest 项目结算记录添加请求体
@ -58,6 +70,30 @@ public class ProjectSettlementController {
public BaseResponse<Boolean> addProjectSettlement(@Valid @RequestBody ProjectSettlementAddRequest projectSettlementAddRequest) {
ProjectSettlement projectSettlement = commonService.copyProperties(projectSettlementAddRequest, ProjectSettlement.class);
projectSettlementService.save(projectSettlement);
// 查询对应的推广码申请记录
Long pid = projectSettlement.getPromoCodeRequestRecordId();
LambdaQueryWrapper<PromoCodeApply> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(PromoCodeApply::getId, pid);
PromoCodeApply promoCodeApply = promoCodeApplyService.getOne(lambdaQueryWrapper);
// 获取推广码申请记录的参数
String projectName = promoCodeApply.getProjectName();
Long userId = promoCodeApply.getUserId();
UserMainInfo userMainInfo = userMainInfoService.getById(userId);
BigDecimal currentBalance = userMainInfo.getCurrentBalance();
// 获取项目结算记录的参数
BigDecimal settlementRevenue = projectSettlement.getSettlementRevenue();
Long projectSettlementId = projectSettlement.getId();
// 添加资金变动记录
FundsChange fundsChange = FundsChange.builder()
.projectName(projectName)
.changeAmount(settlementRevenue)
.currentAmount(currentBalance.add(settlementRevenue))
.userId(userId)
.projectSettlementId(projectSettlementId)
.build();
fundsChangeService.save(fundsChange);
return ResultUtils.success(true);
}
@ -67,12 +103,23 @@ public class ProjectSettlementController {
* @return 是否更新成功
*/
@PostMapping("update")
@Operation(summary = "web端管理员更新项目结算记录", description = "参数项目结算记录更新请求体权限管理员方法名updateProjectSettlement")
@Operation(summary = "web端管理员根据id修改项目结算记录信息", description = "参数项目结算记录更新请求体权限管理员方法名updateProjectSettlement")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目结算记录管理", content = "web端管理员根据id修改项目结算记录信息")
public BaseResponse<Boolean> updateProjectSettlement(@Valid @RequestBody ProjectSettlementUpdateRequest projectSettlementUpdateRequest) {
ProjectSettlement projectSettlement = commonService.copyProperties(projectSettlementUpdateRequest, ProjectSettlement.class);
projectSettlementService.updateById(projectSettlement);
// 修改资金变动记录
Long id = projectSettlement.getId();
LambdaQueryWrapper<FundsChange> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(FundsChange::getProjectSettlementId, id);
FundsChange fundsChange = fundsChangeService.getOne(lambdaQueryWrapper);
BigDecimal changeAmount = fundsChange.getChangeAmount();
BigDecimal currentAmount = fundsChange.getCurrentAmount();
BigDecimal originAmount = currentAmount.subtract(changeAmount);
fundsChange.setChangeAmount(projectSettlement.getSettlementRevenue());
fundsChange.setCurrentAmount(originAmount.add(projectSettlement.getSettlementRevenue()));
fundsChangeService.updateById(fundsChange);
return ResultUtils.success(true);
}
@ -88,23 +135,27 @@ public class ProjectSettlementController {
public BaseResponse<Boolean> delProjectSettlement(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId();
projectSettlementService.removeById(id);
// 删除资金变动记录
LambdaQueryWrapper<FundsChange> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(FundsChange::getProjectSettlementId, id);
fundsChangeService.remove(lambdaQueryWrapper);
return ResultUtils.success(true);
}
/**
* web端管理员批量删除项目结算记录
* @param commonBatchRequest 项目结算记录批量删除请求体
* @return 是否删除成功
*/
@PostMapping("delBatch")
@Operation(summary = "web端管理员批量删除项目结算记录", description = "参数项目结算记录批量删除请求体权限管理员方法名delBatchProjectSettlement")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目结算记录管理", content = "web端管理员批量删除项目结算记录")
public BaseResponse<Boolean> delBatchProjectSettlement(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
List<Long> ids = commonBatchRequest.getIds();
projectSettlementService.removeByIds(ids);
return ResultUtils.success(true);
}
// /**
// * web端管理员批量删除项目结算记录
// * @param commonBatchRequest 项目结算记录批量删除请求体
// * @return 是否删除成功
// */
// @PostMapping("delBatch")
// @Operation(summary = "web端管理员批量删除项目结算记录", description = "参数项目结算记录批量删除请求体权限管理员方法名delBatchProjectSettlement")
// @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
// @SysLog(title = "项目结算记录管理", content = "web端管理员批量删除项目结算记录")
// public BaseResponse<Boolean> delBatchProjectSettlement(@Valid @RequestBody CommonBatchRequest commonBatchRequest) {
// List<Long> ids = commonBatchRequest.getIds();
// projectSettlementService.removeByIds(ids);
// return ResultUtils.success(true);
// }
/**
* web端管理员根据id查询项目结算记录
@ -123,6 +174,27 @@ public class ProjectSettlementController {
return ResultUtils.success(projectSettlementVO);
}
/**
* Web端管理员根据推广码申请记录id查询项目结算记录列表
* @param commonRequest 推广码申请记录id
* @return 项目结算记录列表
*/
@PostMapping("queryByPId")
@Operation(summary = "Web端管理员根据推广码申请记录id查询项目结算记录列表", description = "参数推广码申请记录id权限管理员方法名queryProjectSettlementByPid")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目结算记录管理", content = "Web端管理员根据推广码申请记录id查询项目结算记录列表")
public BaseResponse<List<ProjectSettlementVO>> queryProjectSettlementByPid(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId();
LambdaQueryWrapper<ProjectSettlement> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProjectSettlement::getPromoCodeRequestRecordId, id);
List<ProjectSettlement> projectSettlementList = projectSettlementService.list(lambdaQueryWrapper);
List<ProjectSettlementVO> projectSettlementVOS = commonService.convertList(projectSettlementList, ProjectSettlementVO.class);
return ResultUtils.success(projectSettlementVOS);
}
// /**
// * Web端管理员分页查询项目结算记录
// * @param projectSettlementQueryRequest 项目结算记录查询请求体

View File

@ -178,10 +178,8 @@ public class UserInfoController {
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "用户管理", content = "web端用户根据jwt获取用户信息")
public BaseResponse<UserInfoVO> getWebUserInfoByJWT(HttpServletRequest request) {
String userAccount = (String) request.getAttribute("userAccount");
LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserInfo::getUserAccount, userAccount);
UserInfo userInfo = userInfoService.getOne(lambdaQueryWrapper);
Long userId = (Long) request.getAttribute("userId");
UserInfo userInfo = userInfoService.getById(userId);
UserInfoVO userInfoVO = commonService.copyProperties(userInfo, UserInfoVO.class);
return ResultUtils.success(userInfoVO);
}
@ -197,10 +195,8 @@ public class UserInfoController {
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
@SysLog(title = "用户管理", content = "小程序端用户根据jwt获取用户信息")
public BaseResponse<UserInfoVO> getMiniUserInfoByJWT(HttpServletRequest request) {
String userAccount = (String) request.getAttribute("userAccount");
LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserInfo::getUserAccount, userAccount);
UserInfo userInfo = userInfoService.getOne(lambdaQueryWrapper);
Long userId = (Long) request.getAttribute("userId");
UserInfo userInfo = userInfoService.getById(userId);
UserInfoVO userInfoVO = commonService.copyProperties(userInfo, UserInfoVO.class);
return ResultUtils.success(userInfoVO);
}
@ -215,14 +211,9 @@ public class UserInfoController {
@RequiresPermission(mustRole = UserConstant.DEFAULT_ROLE)
@SysLog(title = "用户管理", content = "小程序端用户根据jwt获取用户主要信息")
public BaseResponse<UserMainInfoVO> getMiniUserMainInfoByJWT(HttpServletRequest request) {
String userAccount = (String) request.getAttribute("userAccount");
LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserInfo::getUserAccount, userAccount);
UserInfo userInfo = userInfoService.getOne(lambdaQueryWrapper);
Long id = userInfo.getId();
Long userId = (Long) request.getAttribute("userId");
LambdaQueryWrapper<UserMainInfo> userMainInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
userMainInfoLambdaQueryWrapper.eq(UserMainInfo::getUserId, id);
userMainInfoLambdaQueryWrapper.eq(UserMainInfo::getUserId, userId);
UserMainInfo userMainInfo = userMainInfoService.getOne(userMainInfoLambdaQueryWrapper);
UserMainInfoVO userMainInfoVO = commonService.copyProperties(userMainInfo, UserMainInfoVO.class);
return ResultUtils.success(userMainInfoVO);

View File

@ -27,13 +27,13 @@ public class Generator {
// 作者
private static final String AUTHOR = "chenxinzhi";
// 表注释
private static final String TABLE_COMMENT = "资金变动记录";
private static final String TABLE_COMMENT = "推广码申请记录";
// 实体类名
private static final String ENTITY_NAME = "FundsChange";
private static final String ENTITY_NAME = "PromoCodeApply";
// 表名
private static final String TABLE_NAME = "funds_change";
private static final String TABLE_NAME = "promo_code_apply";
// 实体类属性名
private static final String ENTITY_NAME_LOWER = "fundsChange";
private static final String ENTITY_NAME_LOWER = "promoCodeApply";
// 父包名
private static final String PARENT_PATH = "com.greenorange.promotion";

View File

@ -18,6 +18,7 @@ import java.io.Serializable;
"changeAmount",
"currentAmount",
"userId",
"projectSettlementId"
})
public class FundsChangeAddRequest implements Serializable {
@ -47,6 +48,13 @@ public class FundsChangeAddRequest implements Serializable {
@Schema(description = "用户ID", example = "1")
private Long userId;
/**
* 项目结算记录ID
*/
@Min(value = 1L, message = "项目结算记录ID ID不能小于1")
@Schema(description = "项目结算记录ID", example = "1")
private Long projectSettlementId;
@Serial
private static final long serialVersionUID = 1L;

View File

@ -50,6 +50,13 @@ public class FundsChangeQueryRequest extends PageRequest implements Serializable
@Schema(description = "用户ID", example = "1")
private Long userId;
/**
* 项目结算记录ID
*/
@Min(value = 1L, message = "项目结算记录ID ID不能小于1")
@Schema(description = "项目结算记录ID", example = "1")
private Long projectSettlementId;
@Serial
private static final long serialVersionUID = 1L;

View File

@ -19,6 +19,7 @@ import java.io.Serializable;
"changeAmount",
"currentAmount",
"userId",
"projectSettlementId"
})
public class FundsChangeUpdateRequest implements Serializable {
@ -55,6 +56,13 @@ public class FundsChangeUpdateRequest implements Serializable {
@Schema(description = "用户ID", example = "1")
private Long userId;
/**
* 项目结算记录ID
*/
@Min(value = 1L, message = "项目结算记录ID ID不能小于1")
@Schema(description = "项目结算记录ID", example = "1")
private Long projectSettlementId;
@Serial
private static final long serialVersionUID = 1L;

View File

@ -7,7 +7,12 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 资金变动记录表
@ -15,6 +20,9 @@ import lombok.Data;
*/
@TableName(value ="funds_change")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class FundsChange implements Serializable {
/**
* 资金变动ID
@ -42,6 +50,11 @@ public class FundsChange implements Serializable {
*/
private Long userId;
/**
* 项目结算记录id
*/
private Long projectSettlementId;
/**
* 是否删除
*/

View File

@ -44,6 +44,11 @@ public class FundsChangeVO implements Serializable {
@Schema(description = "用户ID", example = "1")
private Long userId;
/**
* 项目结算记录ID
*/
@Schema(description = "项目结算记录ID", example = "1")
private Long projectSettlementId;
@Serial
private static final long serialVersionUID = 1L;

View File

@ -1,6 +1,7 @@
package com.greenorange.promotion.model.vo.projectSettlement;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;

View File

@ -42,7 +42,7 @@ public class ${entityName}Controller {
* @return 是否更新成功
*/
@PostMapping("update")
@Operation(summary = "web端管理员更新${entityComment}", description = "参数:${entityComment}更新请求体权限管理员方法名update${entityName}")
@Operation(summary = "web端管理员根据id修改${entityComment}", description = "参数:${entityComment}更新请求体权限管理员方法名update${entityName}")
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "${entityComment}管理", content = "web端管理员根据id修改${entityComment}信息")
public BaseResponse<Boolean> update${entityName}(@Valid @RequestBody ${entityName}UpdateRequest ${entityNameLower}UpdateRequest) {