Compare commits
6 Commits
98f95befd7
...
ead88a0b6c
Author | SHA1 | Date | |
---|---|---|---|
ead88a0b6c | |||
e4f8f6a26e | |||
de79efda9a | |||
0632b32c08 | |||
2ba63d32e1 | |||
2dd21bf657 |
|
@ -1,6 +1,7 @@
|
||||||
package com.greenorange.promotion.controller.project;
|
package com.greenorange.promotion.controller.project;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||||
import com.greenorange.promotion.annotation.RequiresPermission;
|
import com.greenorange.promotion.annotation.RequiresPermission;
|
||||||
import com.greenorange.promotion.annotation.SysLog;
|
import com.greenorange.promotion.annotation.SysLog;
|
||||||
|
@ -24,16 +25,15 @@ import com.greenorange.promotion.service.project.ProjectDetailService;
|
||||||
import com.greenorange.promotion.service.project.ProjectService;
|
import com.greenorange.promotion.service.project.ProjectService;
|
||||||
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
||||||
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
||||||
|
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
@ -70,6 +70,12 @@ public class ProjectCommissionController {
|
||||||
@Resource
|
@Resource
|
||||||
private UserInfoService userInfoService;
|
private UserInfoService userInfoService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserMainInfoService userMainInfoService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 小程序用户查看查询项目的抽佣情况
|
* 小程序用户查看查询项目的抽佣情况
|
||||||
|
@ -279,6 +285,12 @@ public class ProjectCommissionController {
|
||||||
public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
public BaseResponse<Boolean> uniteProjectCommissionRate(@Valid @RequestBody ProjectCommissionUniteUpdateRequest projectCommissionUniteUpdateRequest, HttpServletRequest request) {
|
||||||
Long userId = (Long) request.getAttribute("userId");
|
Long userId = (Long) request.getAttribute("userId");
|
||||||
BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
BigDecimal uniteCommissionRate = projectCommissionUniteUpdateRequest.getUniteCommissionRate();
|
||||||
|
|
||||||
|
// 修改项目的统一抽佣比例
|
||||||
|
LambdaUpdateWrapper<UserMainInfo> userMainInfoLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||||
|
userMainInfoLambdaUpdateWrapper.eq(UserMainInfo::getUserId, userId).set(UserMainInfo::getUniteRate, uniteCommissionRate);
|
||||||
|
userMainInfoService.update(userMainInfoLambdaUpdateWrapper);
|
||||||
|
|
||||||
LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<ProjectCommission> projectCommissionLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
projectCommissionLambdaQueryWrapper.eq(ProjectCommission::getUserId, userId);
|
||||||
List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
|
List<ProjectCommission> projectCommissionList = projectCommissionService.list(projectCommissionLambdaQueryWrapper);
|
||||||
|
|
|
@ -28,6 +28,7 @@ import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
@ -38,6 +39,7 @@ import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -114,6 +116,7 @@ public class ProjectSettlementController {
|
||||||
* @return 是否添加成功
|
* @return 是否添加成功
|
||||||
*/
|
*/
|
||||||
@PostMapping("add")
|
@PostMapping("add")
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
@Operation(summary = "web端管理员添加项目结算记录", description = "参数:项目结算记录添加请求体,权限:管理员,方法名:addProjectSettlement")
|
@Operation(summary = "web端管理员添加项目结算记录", description = "参数:项目结算记录添加请求体,权限:管理员,方法名:addProjectSettlement")
|
||||||
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
@RequiresPermission(mustRole = UserConstant.ADMIN_ROLE)
|
||||||
@SysLog(title = "项目结算记录管理", content = "web端管理员添加项目结算记录")
|
@SysLog(title = "项目结算记录管理", content = "web端管理员添加项目结算记录")
|
||||||
|
@ -123,7 +126,9 @@ public class ProjectSettlementController {
|
||||||
projectSettlementService.save(projectSettlement);
|
projectSettlementService.save(projectSettlement);
|
||||||
|
|
||||||
Long userId = projectSettlement.getUserId();
|
Long userId = projectSettlement.getUserId();
|
||||||
UserMainInfo userMainInfo = userMainInfoService.getById(userId);
|
LambdaQueryWrapper<UserMainInfo> userMainInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
userMainInfoLambdaQueryWrapper.eq(UserMainInfo::getUserId, userId);
|
||||||
|
UserMainInfo userMainInfo = userMainInfoService.getOne(userMainInfoLambdaQueryWrapper);
|
||||||
BigDecimal currentBalance = userMainInfo.getCurrentBalance();
|
BigDecimal currentBalance = userMainInfo.getCurrentBalance();
|
||||||
// 获取项目结算记录的参数
|
// 获取项目结算记录的参数
|
||||||
BigDecimal settlementRevenue = projectSettlement.getSettlementRevenue();
|
BigDecimal settlementRevenue = projectSettlement.getSettlementRevenue();
|
||||||
|
@ -141,7 +146,7 @@ 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();
|
||||||
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;
|
if (agentUnitPrice.compareTo(projectMinSettlementPrice) <= 0) agentUnitPrice = projectMinSettlementPrice;
|
||||||
subUserProjectCommissionMap.put(uid + "-" + subUid, myUnitPrice.subtract(agentUnitPrice));
|
subUserProjectCommissionMap.put(uid + "-" + subUid, myUnitPrice.subtract(agentUnitPrice));
|
||||||
}
|
}
|
||||||
|
@ -172,13 +177,25 @@ public class ProjectSettlementController {
|
||||||
.build();
|
.build();
|
||||||
fundsChangeService.save(fundsChange);
|
fundsChangeService.save(fundsChange);
|
||||||
|
|
||||||
|
// 获取用户主要信息
|
||||||
|
List<UserMainInfo> userMainInfoList = commonService.findByFieldInTargetField(pathToRoot, userMainInfoService, Function.identity(), UserMainInfo::getUserId);
|
||||||
|
// 封装Map集合(键:用户id,值:用户余额)
|
||||||
|
Map<Long, BigDecimal> userMainInfoMap = new HashMap<>();
|
||||||
|
for (UserMainInfo mainInfo : userMainInfoList) {
|
||||||
|
userMainInfoMap.put(mainInfo.getUserId(), mainInfo.getCurrentBalance());
|
||||||
|
}
|
||||||
|
|
||||||
// 批量添加上级用户的项目结算记录
|
// 批量添加上级用户的项目结算记录
|
||||||
List<FundsChange> fundsChangeList = new ArrayList<>();
|
List<FundsChange> fundsChangeList = new ArrayList<>();
|
||||||
for (ProjectSettlement projectSettle : projectSettlementList) {
|
for (ProjectSettlement projectSettle : projectSettlementList) {
|
||||||
|
// 取出当前用户的余额
|
||||||
|
Long uid = projectSettle.getUserId();
|
||||||
|
BigDecimal currentAmount = userMainInfoMap.get(uid);
|
||||||
FundsChange funds = FundsChange.builder()
|
FundsChange funds = FundsChange.builder()
|
||||||
.projectName(projectSettle.getProjectDetailName())
|
.projectName(projectSettle.getProjectDetailName())
|
||||||
.changeAmount(projectSettle.getSettlementRevenue())
|
.changeAmount(projectSettle.getSettlementRevenue())
|
||||||
.userId(projectSettle.getUserId())
|
.currentAmount(currentAmount.add(projectSettle.getSettlementRevenue()))
|
||||||
|
.userId(uid)
|
||||||
.projectSettlementId(projectSettle.getId())
|
.projectSettlementId(projectSettle.getId())
|
||||||
.build();
|
.build();
|
||||||
fundsChangeList.add(funds);
|
fundsChangeList.add(funds);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.greenorange.promotion.model.dto.projectSettlement;
|
package com.greenorange.promotion.model.dto.projectSettlement;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.Min;
|
import jakarta.validation.constraints.Min;
|
||||||
|
|
|
@ -21,6 +21,7 @@ import java.math.BigDecimal;
|
||||||
"withdrawalAmount",
|
"withdrawalAmount",
|
||||||
"withdrawnAmount",
|
"withdrawnAmount",
|
||||||
"totalIncome",
|
"totalIncome",
|
||||||
|
"uniteRate",
|
||||||
"userId",
|
"userId",
|
||||||
"inviteQrCode",
|
"inviteQrCode",
|
||||||
})
|
})
|
||||||
|
@ -68,6 +69,12 @@ public class UserMainInfoAddRequest implements Serializable {
|
||||||
@Schema(description = "累计收入", example = "70.00")
|
@Schema(description = "累计收入", example = "70.00")
|
||||||
private BigDecimal totalIncome;
|
private BigDecimal totalIncome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一抽佣比例
|
||||||
|
*/
|
||||||
|
@Schema(description = "统一抽佣比例", example = "5")
|
||||||
|
private BigDecimal uniteRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -67,6 +67,12 @@ public class UserMainInfoQueryRequest extends PageRequest implements Serializabl
|
||||||
@Schema(description = "累计收入", example = "70.00")
|
@Schema(description = "累计收入", example = "70.00")
|
||||||
private BigDecimal totalIncome;
|
private BigDecimal totalIncome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一抽佣比例
|
||||||
|
*/
|
||||||
|
@Schema(description = "统一抽佣比例", example = "5")
|
||||||
|
private BigDecimal uniteRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,6 +22,7 @@ import java.math.BigDecimal;
|
||||||
"withdrawalAmount",
|
"withdrawalAmount",
|
||||||
"withdrawnAmount",
|
"withdrawnAmount",
|
||||||
"totalIncome",
|
"totalIncome",
|
||||||
|
"uniteRate",
|
||||||
"userId",
|
"userId",
|
||||||
"inviteQrCode",
|
"inviteQrCode",
|
||||||
})
|
})
|
||||||
|
@ -76,6 +77,12 @@ public class UserMainInfoUpdateRequest implements Serializable {
|
||||||
@Schema(description = "累计收入", example = "70.00")
|
@Schema(description = "累计收入", example = "70.00")
|
||||||
private BigDecimal totalIncome;
|
private BigDecimal totalIncome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一抽佣比例
|
||||||
|
*/
|
||||||
|
@Schema(description = "统一抽佣比例", example = "5")
|
||||||
|
private BigDecimal uniteRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -52,6 +52,11 @@ public class UserMainInfo implements Serializable {
|
||||||
*/
|
*/
|
||||||
private BigDecimal totalIncome;
|
private BigDecimal totalIncome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一抽佣比例
|
||||||
|
*/
|
||||||
|
private BigDecimal uniteRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -62,6 +62,12 @@ public class UserMainInfoVO implements Serializable {
|
||||||
@Schema(description = "累计收入", example = "100.00")
|
@Schema(description = "累计收入", example = "100.00")
|
||||||
private BigDecimal totalIncome;
|
private BigDecimal totalIncome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一抽佣比例
|
||||||
|
*/
|
||||||
|
@Schema(description = "统一抽佣比例", example = "5")
|
||||||
|
private BigDecimal uniteRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户id
|
* 用户id
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -18,6 +18,7 @@ import jakarta.annotation.Resource;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
import org.apache.commons.lang.RandomStringUtils;
|
import org.apache.commons.lang.RandomStringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
@ -38,8 +39,9 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 上传文件的服务器存储目录
|
// 文件上传的存储目录
|
||||||
private static final String UPLOAD_DIR = "/www/wwwroot/fileUpload_qc/";
|
@Value("${file.upload-dir}")
|
||||||
|
private String uploadDir;
|
||||||
|
|
||||||
|
|
||||||
// 优化:设置一个合理的缓冲区大小
|
// 优化:设置一个合理的缓冲区大小
|
||||||
|
@ -101,7 +103,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo>
|
||||||
.build();
|
.build();
|
||||||
this.save(fileInfo);
|
this.save(fileInfo);
|
||||||
// 创建上传目录,如果不存在
|
// 创建上传目录,如果不存在
|
||||||
File file = new File(UPLOAD_DIR + fileName);
|
File file = new File(uploadDir + fileName);
|
||||||
if (!file.getParentFile().exists()) {
|
if (!file.getParentFile().exists()) {
|
||||||
file.getParentFile().mkdirs();// 如果路径不存在则创建
|
file.getParentFile().mkdirs();// 如果路径不存在则创建
|
||||||
}
|
}
|
||||||
|
@ -132,7 +134,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo>
|
||||||
FileInfo fileInfo = this.getOne(lambdaQueryWrapper);
|
FileInfo fileInfo = this.getOne(lambdaQueryWrapper);
|
||||||
ThrowUtils.throwIf(fileInfo == null, ErrorCode.NOT_FOUND_ERROR, "文件不存在");
|
ThrowUtils.throwIf(fileInfo == null, ErrorCode.NOT_FOUND_ERROR, "文件不存在");
|
||||||
|
|
||||||
File file = new File(UPLOAD_DIR + fileInfo.getName());
|
File file = new File(uploadDir + fileInfo.getName());
|
||||||
// // 设置response的Header
|
// // 设置response的Header
|
||||||
response.setContentType("application/octet-stream");
|
response.setContentType("application/octet-stream");
|
||||||
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileInfo.getName(), StandardCharsets.UTF_8));
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileInfo.getName(), StandardCharsets.UTF_8));
|
||||||
|
|
|
@ -14,13 +14,11 @@ import com.greenorange.promotion.exception.ThrowUtils;
|
||||||
import com.greenorange.promotion.mapper.UserInfoMapper;
|
import com.greenorange.promotion.mapper.UserInfoMapper;
|
||||||
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionAddRequest;
|
import com.greenorange.promotion.model.dto.projectCommission.ProjectCommissionAddRequest;
|
||||||
import com.greenorange.promotion.model.dto.userInfo.*;
|
import com.greenorange.promotion.model.dto.userInfo.*;
|
||||||
import com.greenorange.promotion.model.entity.ProjectCommission;
|
import com.greenorange.promotion.model.entity.*;
|
||||||
import com.greenorange.promotion.model.entity.SubUserProjectCommission;
|
|
||||||
import com.greenorange.promotion.model.entity.UserInfo;
|
|
||||||
import com.greenorange.promotion.model.entity.UserMainInfo;
|
|
||||||
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
import com.greenorange.promotion.model.enums.UserRoleEnum;
|
||||||
import com.greenorange.promotion.service.common.CommonService;
|
import com.greenorange.promotion.service.common.CommonService;
|
||||||
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
import com.greenorange.promotion.service.project.ProjectCommissionService;
|
||||||
|
import com.greenorange.promotion.service.project.ProjectDetailService;
|
||||||
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
import com.greenorange.promotion.service.project.SubUserProjectCommissionService;
|
||||||
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
import com.greenorange.promotion.service.userInfo.UserInfoService;
|
||||||
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
|
import com.greenorange.promotion.service.userInfo.UserMainInfoService;
|
||||||
|
@ -34,14 +32,17 @@ import jakarta.servlet.http.HttpServletRequest;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.math.RoundingMode;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 35880
|
* @author 35880
|
||||||
|
@ -71,16 +72,25 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
|
||||||
@Resource
|
@Resource
|
||||||
private WechatGetQrcodeService wechatGetQrcodeService;
|
private WechatGetQrcodeService wechatGetQrcodeService;
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ProjectCommissionService projectCommissionService;
|
private ProjectCommissionService projectCommissionService;
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private SubUserProjectCommissionService subUserProjectCommissionService;
|
private SubUserProjectCommissionService subUserProjectCommissionService;
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private UserInfoMapper userInfoMapper;
|
private UserInfoMapper userInfoMapper;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ProjectDetailService projectDetailService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取查询条件
|
* 获取查询条件
|
||||||
*/
|
*/
|
||||||
|
@ -125,6 +135,7 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
|
||||||
* 小程序用户注册
|
* 小程序用户注册
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void userInfoMiniRegister(UserInfoRegisterRequest userInfoRegisterRequest) {
|
public void userInfoMiniRegister(UserInfoRegisterRequest userInfoRegisterRequest) {
|
||||||
String phoneNumber = userInfoRegisterRequest.getPhoneNumber();
|
String phoneNumber = userInfoRegisterRequest.getPhoneNumber();
|
||||||
ThrowUtils.throwIf(RegexUtils.isPhoneInvalid(phoneNumber), ErrorCode.PARAMS_ERROR, "手机号格式无效");
|
ThrowUtils.throwIf(RegexUtils.isPhoneInvalid(phoneNumber), ErrorCode.PARAMS_ERROR, "手机号格式无效");
|
||||||
|
@ -178,21 +189,30 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo>
|
||||||
|
|
||||||
// 查询上级用户的项目抽佣记录
|
// 查询上级用户的项目抽佣记录
|
||||||
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getUserId, parentUserInfo.getId(), projectCommissionService);
|
List<ProjectCommission> projectCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getUserId, parentUserInfo.getId(), projectCommissionService);
|
||||||
|
// 封装Map集合(键:项目明细id, 值:项目最小价格)
|
||||||
|
Map<Long, BigDecimal> projectDetailMinPriceMap = new HashMap<>();
|
||||||
|
List<ProjectDetail> projectDetailList = commonService.findByFieldInTargetField(projectCommissionList, projectDetailService, ProjectCommission::getProjectDetailId, ProjectDetail::getId);
|
||||||
|
for (ProjectDetail projectDetail : projectDetailList) {
|
||||||
|
projectDetailMinPriceMap.put(projectDetail.getId(), projectDetail.getProjectMinSettlementPrice());
|
||||||
|
}
|
||||||
// 插入当前用户的项目抽佣记录
|
// 插入当前用户的项目抽佣记录
|
||||||
List<ProjectCommission> projectCommissions = new ArrayList<>();
|
List<ProjectCommission> projectCommissions = new ArrayList<>();
|
||||||
for (ProjectCommission projectCommission : projectCommissionList) {
|
for (ProjectCommission projectCommission : projectCommissionList) {
|
||||||
ProjectCommissionAddRequest projectCommissionAddRequest = commonService.copyProperties(projectCommission, ProjectCommissionAddRequest.class);
|
ProjectCommissionAddRequest projectCommissionAddRequest = commonService.copyProperties(projectCommission, ProjectCommissionAddRequest.class);
|
||||||
ProjectCommission proCommission = commonService.copyProperties(projectCommissionAddRequest, ProjectCommission.class);
|
ProjectCommission proCommission = commonService.copyProperties(projectCommissionAddRequest, ProjectCommission.class);
|
||||||
proCommission.setMyUnitPrice(projectCommission.getMyUnitPrice().multiply(BigDecimal.ONE.subtract(projectCommission.getCurrentCommissionRate())));
|
// 获取当前项目明细的最小结算价格
|
||||||
|
BigDecimal projectMinSettlementPrice = projectDetailMinPriceMap.get(projectCommission.getProjectDetailId());
|
||||||
|
BigDecimal currentSettlementPrice = projectCommission.getMyUnitPrice().multiply(BigDecimal.ONE.subtract(projectCommission.getCurrentCommissionRate().divide(BigDecimal.valueOf(100))));
|
||||||
|
// 比较当前结算价格和项目明细最小结算价格,取出最大值
|
||||||
|
proCommission.setMyUnitPrice(projectMinSettlementPrice.max(currentSettlementPrice));
|
||||||
proCommission.setCurrentCommissionRate(BigDecimal.ZERO);
|
proCommission.setCurrentCommissionRate(BigDecimal.ZERO);
|
||||||
proCommission.setUserId(myUserInfo.getId());
|
proCommission.setUserId(myUserInfo.getId());
|
||||||
projectCommissions.add(proCommission);
|
projectCommissions.add(proCommission);
|
||||||
}
|
}
|
||||||
projectCommissionService.saveBatch(projectCommissions);
|
projectCommissionService.saveBatch(projectCommissions);
|
||||||
// 插入下级用户的项目明细抽佣记录
|
// 插入下级用户的项目明细抽佣记录
|
||||||
List<ProjectCommission> proCommissionList = commonService.findByFieldEqTargetField(ProjectCommission::getUserId, parentUserInfo.getId(), projectCommissionService);
|
|
||||||
List<SubUserProjectCommission> subUserProjectCommissionList = new ArrayList<>();
|
List<SubUserProjectCommission> subUserProjectCommissionList = new ArrayList<>();
|
||||||
for (ProjectCommission projectCommission : proCommissionList) {
|
for (ProjectCommission projectCommission : projectCommissionList) {
|
||||||
ProjectCommissionAddRequest projectCommissionAddRequest = commonService.copyProperties(projectCommission, ProjectCommissionAddRequest.class);
|
ProjectCommissionAddRequest projectCommissionAddRequest = commonService.copyProperties(projectCommission, ProjectCommissionAddRequest.class);
|
||||||
SubUserProjectCommission subUserProjectCommission = commonService.copyProperties(projectCommissionAddRequest, SubUserProjectCommission.class);
|
SubUserProjectCommission subUserProjectCommission = commonService.copyProperties(projectCommissionAddRequest, SubUserProjectCommission.class);
|
||||||
subUserProjectCommission.setSubUserId(myUserInfo.getId());
|
subUserProjectCommission.setSubUserId(myUserInfo.getId());
|
||||||
|
|
|
@ -19,9 +19,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
import org.apache.commons.lang.RandomStringUtils;
|
import org.apache.commons.lang.RandomStringUtils;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
@ -36,8 +38,9 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 上传文件的服务器存储目录
|
// 文件上传的存储目录
|
||||||
private static final String UPLOAD_DIR = "D:/qingcheng/image/";
|
@Value("${file.upload-dir}")
|
||||||
|
private String uploadDir;
|
||||||
|
|
||||||
|
|
||||||
private final static String ACCESS_TOKEN_KEY = "accessToken";
|
private final static String ACCESS_TOKEN_KEY = "accessToken";
|
||||||
|
@ -99,15 +102,16 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
|
||||||
* 获取微信小程序二维码
|
* 获取微信小程序二维码
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public String getWxQrCode(String inviteCode) throws IOException {
|
public String getWxQrCode(String inviteCode) throws IOException {
|
||||||
String accessToken = (String) redisTemplate.opsForValue().get(ACCESS_TOKEN_KEY);
|
String accessToken = (String) redisTemplate.opsForValue().get(ACCESS_TOKEN_KEY);
|
||||||
if (accessToken == null) {
|
if (accessToken == null) {
|
||||||
accessToken = this.getAccessToken().getAccess_token();
|
accessToken = this.getAccessToken().getAccess_token();
|
||||||
}
|
}
|
||||||
Map<String, Object> param = new HashMap<>();
|
Map<String, Object> param = new HashMap<>();
|
||||||
param.put("page", "pages/login/login");
|
param.put("page", "pages/loginModule/register/register");
|
||||||
param.put("scene", "invitationCode=" + inviteCode);
|
param.put("scene", "invitationCode=" + inviteCode);
|
||||||
param.put("width", 430); // 宽度
|
param.put("width", 430);
|
||||||
param.put("check_path", false);
|
param.put("check_path", false);
|
||||||
param.put("env_version", "develop");
|
param.put("env_version", "develop");
|
||||||
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
|
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
|
||||||
|
@ -140,14 +144,12 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
|
||||||
byte[] resultBytes = resultStream.readAllBytes();
|
byte[] resultBytes = resultStream.readAllBytes();
|
||||||
// 创建上传目录,如果不存在
|
// 创建上传目录,如果不存在
|
||||||
String biz = "default";
|
String biz = "default";
|
||||||
String fileName = "qrcode.png";
|
String fileName = RandomStringUtils.random(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") + "." + "png";
|
||||||
// 获取文件类型
|
// 获取文件类型
|
||||||
String fileType = FileUtil.getSuffix(fileName);
|
String fileType = FileUtil.getSuffix(fileName);
|
||||||
// 获取文件路径
|
|
||||||
String filePath = String.format("%s-%s", biz, fileName);
|
|
||||||
// 获取view值
|
// 获取view值
|
||||||
String view = RandomStringUtils.random(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
|
String view = RandomStringUtils.random(8, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
|
||||||
File file = new File(UPLOAD_DIR + filePath);
|
File file = new File(uploadDir + fileName);
|
||||||
if (!file.getParentFile().exists()) {
|
if (!file.getParentFile().exists()) {
|
||||||
file.getParentFile().mkdirs();// 如果路径不存在则创建
|
file.getParentFile().mkdirs();// 如果路径不存在则创建
|
||||||
}
|
}
|
||||||
|
@ -181,6 +183,6 @@ public class WechatGetQrcodeServiceImpl implements WechatGetQrcodeService {
|
||||||
.hashValue(hashValue)
|
.hashValue(hashValue)
|
||||||
.build();
|
.build();
|
||||||
fileInfoService.save(fileInfo);
|
fileInfoService.save(fileInfo);
|
||||||
return view;
|
return biz + "-" + view;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,18 @@ spring:
|
||||||
multipart:
|
multipart:
|
||||||
max-file-size: 20MB
|
max-file-size: 20MB
|
||||||
max-request-size: 20MB
|
max-request-size: 20MB
|
||||||
|
|
||||||
|
|
||||||
jackson:
|
jackson:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
|
|
||||||
|
#文件上传和下载地址
|
||||||
|
file:
|
||||||
|
# upload-dir: /www/wwwroot/fileUpload_qc/
|
||||||
|
upload-dir: D:/qingcheng/image/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
springdoc:
|
springdoc:
|
||||||
default-flat-param-object: true
|
default-flat-param-object: true
|
||||||
|
|
||||||
|
|
|
@ -22,13 +22,18 @@ spring:
|
||||||
multipart:
|
multipart:
|
||||||
max-file-size: 20MB
|
max-file-size: 20MB
|
||||||
max-request-size: 20MB
|
max-request-size: 20MB
|
||||||
|
|
||||||
|
|
||||||
jackson:
|
jackson:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
|
|
||||||
|
#文件上传和下载地址
|
||||||
|
file:
|
||||||
|
# upload-dir: /www/wwwroot/fileUpload_qc/
|
||||||
|
upload-dir: D:/qingcheng/image/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
springdoc:
|
springdoc:
|
||||||
default-flat-param-object: true
|
default-flat-param-object: true
|
||||||
|
|
||||||
|
|
|
@ -22,13 +22,19 @@ spring:
|
||||||
multipart:
|
multipart:
|
||||||
max-file-size: 20MB
|
max-file-size: 20MB
|
||||||
max-request-size: 20MB
|
max-request-size: 20MB
|
||||||
|
|
||||||
|
|
||||||
jackson:
|
jackson:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#文件上传和下载地址
|
||||||
|
file:
|
||||||
|
# upload-dir: /www/wwwroot/fileUpload_qc/
|
||||||
|
upload-dir: D:/qingcheng/image/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
springdoc:
|
springdoc:
|
||||||
default-flat-param-object: true
|
default-flat-param-object: true
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,18 @@ spring:
|
||||||
multipart:
|
multipart:
|
||||||
max-file-size: 20MB
|
max-file-size: 20MB
|
||||||
max-request-size: 20MB
|
max-request-size: 20MB
|
||||||
|
|
||||||
|
|
||||||
jackson:
|
jackson:
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
|
|
||||||
|
|
||||||
|
# 文件上传和下载地址
|
||||||
|
file:
|
||||||
|
# upload-dir: /www/wwwroot/fileUpload_qc/
|
||||||
|
upload-dir: D:/qingcheng/image/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
springdoc:
|
springdoc:
|
||||||
default-flat-param-object: true
|
default-flat-param-object: true
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user