Compare commits

...

6 Commits

15 changed files with 142 additions and 35 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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
*/ */

View File

@ -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
*/ */

View File

@ -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
*/ */

View File

@ -52,6 +52,11 @@ public class UserMainInfo implements Serializable {
*/ */
private BigDecimal totalIncome; private BigDecimal totalIncome;
/**
* 统一抽佣比例
*/
private BigDecimal uniteRate;
/** /**
* 用户id * 用户id
*/ */

View File

@ -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
*/ */

View File

@ -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));

View File

@ -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());

View File

@ -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;
} }
} }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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