diff --git a/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java b/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java index 1b383e7..345fdaf 100644 --- a/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java +++ b/src/main/java/com/greenorange/promotion/controller/projectSettlement/ProjectSettlementController.java @@ -28,6 +28,7 @@ import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -38,6 +39,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.Function; /** @@ -114,6 +116,7 @@ public class ProjectSettlementController { * @return 是否添加成功 */ @PostMapping("add") + @Transactional(rollbackFor = Exception.class) @Operation(summary = "web端管理员添加项目结算记录", description = "参数:项目结算记录添加请求体,权限:管理员,方法名:addProjectSettlement") @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @SysLog(title = "项目结算记录管理", content = "web端管理员添加项目结算记录") @@ -123,7 +126,9 @@ public class ProjectSettlementController { projectSettlementService.save(projectSettlement); Long userId = projectSettlement.getUserId(); - UserMainInfo userMainInfo = userMainInfoService.getById(userId); + LambdaQueryWrapper userMainInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); + userMainInfoLambdaQueryWrapper.eq(UserMainInfo::getUserId, userId); + UserMainInfo userMainInfo = userMainInfoService.getOne(userMainInfoLambdaQueryWrapper); BigDecimal currentBalance = userMainInfo.getCurrentBalance(); // 获取项目结算记录的参数 BigDecimal settlementRevenue = projectSettlement.getSettlementRevenue(); @@ -141,7 +146,7 @@ public class ProjectSettlementController { Long subUid = subUserProjectCommission.getSubUserId(); BigDecimal myUnitPrice = subUserProjectCommission.getMyUnitPrice(); BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate(); - BigDecimal agentUnitPrice = myUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate)); + BigDecimal agentUnitPrice = myUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate.divide(BigDecimal.valueOf(100)))); if (agentUnitPrice.compareTo(projectMinSettlementPrice) <= 0) agentUnitPrice = projectMinSettlementPrice; subUserProjectCommissionMap.put(uid + "-" + subUid, myUnitPrice.subtract(agentUnitPrice)); } @@ -172,13 +177,25 @@ public class ProjectSettlementController { .build(); fundsChangeService.save(fundsChange); + // 获取用户主要信息 + List userMainInfoList = commonService.findByFieldInTargetField(pathToRoot, userMainInfoService, Function.identity(), UserMainInfo::getUserId); + // 封装Map集合(键:用户id,值:用户余额) + Map userMainInfoMap = new HashMap<>(); + for (UserMainInfo mainInfo : userMainInfoList) { + userMainInfoMap.put(mainInfo.getUserId(), mainInfo.getCurrentBalance()); + } + // 批量添加上级用户的项目结算记录 List fundsChangeList = new ArrayList<>(); for (ProjectSettlement projectSettle : projectSettlementList) { + // 取出当前用户的余额 + Long uid = projectSettle.getUserId(); + BigDecimal currentAmount = userMainInfoMap.get(uid); FundsChange funds = FundsChange.builder() .projectName(projectSettle.getProjectDetailName()) .changeAmount(projectSettle.getSettlementRevenue()) - .userId(projectSettle.getUserId()) + .currentAmount(currentAmount.add(projectSettle.getSettlementRevenue())) + .userId(uid) .projectSettlementId(projectSettle.getId()) .build(); fundsChangeList.add(funds); diff --git a/src/main/java/com/greenorange/promotion/model/dto/projectSettlement/ProjectSettlementAddRequest.java b/src/main/java/com/greenorange/promotion/model/dto/projectSettlement/ProjectSettlementAddRequest.java index 3187297..1ac7255 100644 --- a/src/main/java/com/greenorange/promotion/model/dto/projectSettlement/ProjectSettlementAddRequest.java +++ b/src/main/java/com/greenorange/promotion/model/dto/projectSettlement/ProjectSettlementAddRequest.java @@ -1,5 +1,6 @@ package com.greenorange.promotion.model.dto.projectSettlement; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Min; diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 31e1477..c4b8d74 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -21,6 +21,9 @@ spring: multipart: max-file-size: 20MB max-request-size: 20MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 #文件上传和下载地址 @@ -29,10 +32,6 @@ file: upload-dir: D:/qingcheng/image/ - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - springdoc: default-flat-param-object: true diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 23599ec..fcfc208 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -22,6 +22,9 @@ spring: multipart: max-file-size: 20MB max-request-size: 20MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 #文件上传和下载地址 @@ -30,10 +33,6 @@ file: upload-dir: D:/qingcheng/image/ - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - springdoc: default-flat-param-object: true diff --git a/src/main/resources/application-test-caozhe.yml b/src/main/resources/application-test-caozhe.yml index a88814f..a96a86b 100644 --- a/src/main/resources/application-test-caozhe.yml +++ b/src/main/resources/application-test-caozhe.yml @@ -22,6 +22,11 @@ spring: multipart: max-file-size: 20MB max-request-size: 20MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + + #文件上传和下载地址 file: @@ -29,10 +34,6 @@ file: upload-dir: D:/qingcheng/image/ - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 - springdoc: default-flat-param-object: true diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index 9962244..2c7349e 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -22,6 +22,9 @@ spring: multipart: max-file-size: 20MB max-request-size: 20MB + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 # 文件上传和下载地址 @@ -30,9 +33,6 @@ file: upload-dir: D:/qingcheng/image/ - jackson: - date-format: yyyy-MM-dd HH:mm:ss - time-zone: GMT+8 springdoc: default-flat-param-object: true