完成了第一版

This commit is contained in:
chen-xin-zhi 2025-05-15 14:19:12 +08:00
parent 1a14df8296
commit 943454c734
5 changed files with 124 additions and 15 deletions

View File

@ -118,15 +118,11 @@ public class ProjectSettlementController {
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE) @RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
@SysLog(title = "项目结算记录管理", content = "web端管理员添加项目结算记录") @SysLog(title = "项目结算记录管理", content = "web端管理员添加项目结算记录")
public BaseResponse<Boolean> addProjectSettlement(@Valid @RequestBody ProjectSettlementAddRequest projectSettlementAddRequest) { public BaseResponse<Boolean> addProjectSettlement(@Valid @RequestBody ProjectSettlementAddRequest projectSettlementAddRequest) {
// 添加当前用户的项目结算记录
ProjectSettlement projectSettlement = commonService.copyProperties(projectSettlementAddRequest, ProjectSettlement.class); ProjectSettlement projectSettlement = commonService.copyProperties(projectSettlementAddRequest, ProjectSettlement.class);
projectSettlementService.save(projectSettlement); projectSettlementService.save(projectSettlement);
// 查询对应的推广码申请记录 Long userId = projectSettlement.getUserId();
Long applyId = projectSettlement.getPromoCodeApplyId();
PromoCodeApply promoCodeApply = promoCodeApplyService.getById(applyId);
// 获取推广码申请记录的参数
String projectName = promoCodeApply.getProjectName();
Long userId = promoCodeApply.getUserId();
UserMainInfo userMainInfo = userMainInfoService.getById(userId); UserMainInfo userMainInfo = userMainInfoService.getById(userId);
BigDecimal currentBalance = userMainInfo.getCurrentBalance(); BigDecimal currentBalance = userMainInfo.getCurrentBalance();
// 获取项目结算记录的参数 // 获取项目结算记录的参数
@ -135,7 +131,6 @@ public class ProjectSettlementController {
// 获取项目明细的结算价格 // 获取项目明细的结算价格
Long projectDetailId = projectSettlement.getProjectDetailId(); Long projectDetailId = projectSettlement.getProjectDetailId();
ProjectDetail projectDetail = projectDetailService.getById(projectDetailId); ProjectDetail projectDetail = projectDetailService.getById(projectDetailId);
BigDecimal projectSettlementPrice = projectDetail.getProjectSettlementPrice();
BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice(); BigDecimal projectMinSettlementPrice = projectDetail.getProjectMinSettlementPrice();
// 批量添加上级用户的项目结算记录 // 批量添加上级用户的项目结算记录
List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService); List<SubUserProjectCommission> subUserProjectCommissionList = commonService.findByFieldEqTargetField(SubUserProjectCommission::getProjectDetailId, projectDetailId, subUserProjectCommissionService);
@ -146,7 +141,9 @@ public class ProjectSettlementController {
Long subUid = subUserProjectCommission.getSubUserId(); Long subUid = subUserProjectCommission.getSubUserId();
BigDecimal myUnitPrice = subUserProjectCommission.getMyUnitPrice(); BigDecimal myUnitPrice = subUserProjectCommission.getMyUnitPrice();
BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate(); BigDecimal currentCommissionRate = subUserProjectCommission.getCurrentCommissionRate();
subUserProjectCommissionMap.put(uid + "-" + subUid, myUnitPrice.multiply(currentCommissionRate)); BigDecimal agentUnitPrice = myUnitPrice.multiply(BigDecimal.ONE.subtract(currentCommissionRate));
if (agentUnitPrice.compareTo(projectMinSettlementPrice) <= 0) agentUnitPrice = projectMinSettlementPrice;
subUserProjectCommissionMap.put(uid + "-" + subUid, myUnitPrice.subtract(agentUnitPrice));
} }
List<ProjectSettlement> projectSettlementList = new ArrayList<>(); List<ProjectSettlement> projectSettlementList = new ArrayList<>();
// 获取当前用户到根用户的路径 // 获取当前用户到根用户的路径
@ -155,17 +152,19 @@ public class ProjectSettlementController {
Long uid = pathToRoot.get(i); Long uid = pathToRoot.get(i);
Long subUid = pathToRoot.get(i + 1); Long subUid = pathToRoot.get(i + 1);
BigDecimal commissionRatePrice = subUserProjectCommissionMap.get(uid + "-" + subUid); BigDecimal commissionRatePrice = subUserProjectCommissionMap.get(uid + "-" + subUid);
if (commissionRatePrice.compareTo(BigDecimal.ZERO) == 0) continue;
ProjectSettlement projectSettle = commonService.copyProperties(projectSettlementAddRequest, ProjectSettlement.class); ProjectSettlement projectSettle = commonService.copyProperties(projectSettlementAddRequest, ProjectSettlement.class);
projectSettle.setSettlementRevenue(commissionRatePrice); projectSettle.setSettlementRevenue(commissionRatePrice);
projectSettle.setRevenueSource(true); projectSettle.setRevenueSource(true);
projectSettle.setSuperId(projectSettlementId); projectSettle.setSuperId(projectSettlementId);
projectSettle.setUserId(uid);
projectSettlementList.add(projectSettle); projectSettlementList.add(projectSettle);
} }
projectSettlementService.saveBatch(projectSettlementList); projectSettlementService.saveBatch(projectSettlementList);
// 添加资金变动记录 // 添加当前用户的资金变动记录
FundsChange fundsChange = FundsChange.builder() FundsChange fundsChange = FundsChange.builder()
.projectName(projectName) .projectName(projectSettlement.getProjectDetailName())
.changeAmount(settlementRevenue) .changeAmount(settlementRevenue)
.currentAmount(currentBalance.add(settlementRevenue)) .currentAmount(currentBalance.add(settlementRevenue))
.userId(userId) .userId(userId)
@ -173,7 +172,18 @@ public class ProjectSettlementController {
.build(); .build();
fundsChangeService.save(fundsChange); fundsChangeService.save(fundsChange);
// 批量添加下级用户的项目结算记录 // 批量添加上级用户的项目结算记录
List<FundsChange> fundsChangeList = new ArrayList<>();
for (ProjectSettlement projectSettle : projectSettlementList) {
FundsChange funds = FundsChange.builder()
.projectName(projectSettle.getProjectDetailName())
.changeAmount(projectSettle.getSettlementRevenue())
.userId(projectSettle.getUserId())
.projectSettlementId(projectSettle.getId())
.build();
fundsChangeList.add(funds);
}
fundsChangeService.saveBatch(fundsChangeList);
return ResultUtils.success(true); return ResultUtils.success(true);
} }
@ -249,7 +259,6 @@ public class ProjectSettlementController {
public BaseResponse<ProjectSettlementVO> queryProjectSettlementById(@Valid @RequestBody CommonRequest commonRequest) { public BaseResponse<ProjectSettlementVO> queryProjectSettlementById(@Valid @RequestBody CommonRequest commonRequest) {
Long id = commonRequest.getId(); Long id = commonRequest.getId();
ProjectSettlement projectSettlement = projectSettlementService.getById(id); ProjectSettlement projectSettlement = projectSettlementService.getById(id);
ThrowUtils.throwIf(projectSettlement == null, ErrorCode.OPERATION_ERROR, "当前项目结算记录不存在");
ProjectSettlementVO projectSettlementVO = commonService.copyProperties(projectSettlement, ProjectSettlementVO.class); ProjectSettlementVO projectSettlementVO = commonService.copyProperties(projectSettlement, ProjectSettlementVO.class);
return ResultUtils.success(projectSettlementVO); return ResultUtils.success(projectSettlementVO);
} }

View File

@ -22,7 +22,8 @@ import java.time.LocalDateTime;
"settlementTime", "settlementTime",
"promoCodeApplyId", "promoCodeApplyId",
"projectId", "projectId",
"projectDetailId" "projectDetailId",
"userId"
}) })
public class ProjectSettlementAddRequest implements Serializable { public class ProjectSettlementAddRequest implements Serializable {
@ -78,6 +79,13 @@ public class ProjectSettlementAddRequest implements Serializable {
@Schema(description = "项目明细", example = "1") @Schema(description = "项目明细", example = "1")
private Long projectDetailId; private Long projectDetailId;
/**
* 用户id
*/
@Min(value = 1L, message = "用户id ID不能小于1")
@Schema(description = "用户id", example = "1")
private Long userId;
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -79,6 +79,11 @@ public class ProjectSettlement implements Serializable {
*/ */
private Long superId; private Long superId;
/**
* 用户id
*/
private Long userId;
/** /**
* 是否删除 * 是否删除
*/ */

View File

@ -0,0 +1,87 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://1.94.237.210:3306/qingcheng-test-caozhe?serverTimezone=Asia/Shanghai
username: qingcheng
password: Qc@123456
hikari:
maximum-pool-size: 20
max-lifetime: 120000
data:
redis:
port: 6379
host: 154.8.193.216
database: 7
password: Cksys6509
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
springdoc:
default-flat-param-object: true
#线程池配置
threadpool:
corePoolSize: 10
maxPoolSize: 50
queueCapacity: 1024
keepAliveTime: 60
server:
port: 3456
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: false
# log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: isDelete #全局逻辑删除的实体字段名
logic-delete-value: 1 #逻辑已删除值(默认为1)
logic-not-delete-value: 0 #逻辑未删除值(默认为0)
type-handlers-package: com.cultural.heritage.handler
wx:
mini:
appId: wx3f968a09e31d6bed
appSecret: 0b23498d19665dc323efdd3ed5367041
pay:
#应用id小程序id
appId: wx61b63e27bddf4ea2
#商户号
merchantId: 1700326544
# #商户API私钥
# privateKeyPath: apiclient_key.pem
#商户证书序列号
merchantSerialNumber: 6DC8953AB741D309920DA650B92F837BE38A2757
# #商户APIv3密钥
# apiV3Key: fbemuj4Xql7CYlQJAoTEPYxvPSNgYT2t
#通知地址
notifyUrl: https://winning-mouse-internally.ngrok-free.app
#微信服务器地址
domain: https://api.mch.weixin.qq.com
#商户APIv2密钥
apiV2Key: cvsOH6TgbbdNUUqFJyLmWGaIEKoSqANg
#商户API证书
certificatePath: static/apiclient_cert.p12
knife4j:
enable: true

View File

@ -1,4 +1,4 @@
spring: spring:
profiles: profiles:
active: dev active: test-caozhe