修改:uploadPath的配置值和的file路径拼接
This commit is contained in:
@@ -133,13 +133,13 @@ public class BszxBmServiceImpl extends ServiceImpl<BszxBmMapper, BszxBm> impleme
|
|||||||
//执行图片合并
|
//执行图片合并
|
||||||
combiner.combine();
|
combiner.combine();
|
||||||
|
|
||||||
if (!FileUtil.exist(uploadPath + "file/poster/" + item.getTenantId() + "/bm")) {
|
if (!FileUtil.exist(uploadPath + "/file/poster/" + item.getTenantId() + "/bm")) {
|
||||||
FileUtil.mkdir(uploadPath + "file/poster/" + item.getTenantId() + "/bm");
|
FileUtil.mkdir(uploadPath + "/file/poster/" + item.getTenantId() + "/bm");
|
||||||
}
|
}
|
||||||
String basePath = "/poster/" + item.getTenantId() + "/bm/big-" + item.getId() + ".jpg";
|
String basePath = "/poster/" + item.getTenantId() + "/bm/big-" + item.getId() + ".jpg";
|
||||||
String smallPath = "/poster/" + item.getTenantId() + "/bm/" + item.getId() + ".jpg";
|
String smallPath = "/poster/" + item.getTenantId() + "/bm/" + item.getId() + ".jpg";
|
||||||
String filename = uploadPath + "file" + basePath;
|
String filename = uploadPath + "/file" + basePath;
|
||||||
String smallFileName = uploadPath + "file" + smallPath;
|
String smallFileName = uploadPath + "/file" + smallPath;
|
||||||
combiner.save(filename);
|
combiner.save(filename);
|
||||||
|
|
||||||
File input = new File(filename);
|
File input = new File(filename);
|
||||||
|
|||||||
@@ -123,13 +123,13 @@ public class BszxPayServiceImpl extends ServiceImpl<BszxPayMapper, BszxPay> impl
|
|||||||
//执行图片合并
|
//执行图片合并
|
||||||
combiner.combine();
|
combiner.combine();
|
||||||
|
|
||||||
if (!FileUtil.exist(uploadPath + "file/poster/" + payCert.getTenantId() + "/pay")) {
|
if (!FileUtil.exist(uploadPath + "/file/poster/" + payCert.getTenantId() + "/pay")) {
|
||||||
FileUtil.mkdir(uploadPath + "file/poster/" + payCert.getTenantId() + "/pay");
|
FileUtil.mkdir(uploadPath + "/file/poster/" + payCert.getTenantId() + "/pay");
|
||||||
}
|
}
|
||||||
String basePath = "/poster/" + payCert.getTenantId() + "/pay/big-" + id + ".jpg";
|
String basePath = "/poster/" + payCert.getTenantId() + "/pay/big-" + id + ".jpg";
|
||||||
String smallPath = "/poster/" + payCert.getTenantId() + "/pay/" + id + ".jpg";
|
String smallPath = "/poster/" + payCert.getTenantId() + "/pay/" + id + ".jpg";
|
||||||
String filename = uploadPath + "file" + basePath;
|
String filename = uploadPath + "/file" + basePath;
|
||||||
String smallFileName = uploadPath + "file" + smallPath;
|
String smallFileName = uploadPath + "/file" + smallPath;
|
||||||
combiner.save(filename);
|
combiner.save(filename);
|
||||||
|
|
||||||
File input = new File(filename);
|
File input = new File(filename);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
|
|||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.extra.qrcode.QrCodeUtil;
|
import cn.hutool.extra.qrcode.QrCodeUtil;
|
||||||
import cn.hutool.extra.qrcode.QrConfig;
|
import cn.hutool.extra.qrcode.QrConfig;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
@@ -22,6 +23,9 @@ import static com.gxwebsoft.common.core.constants.QRCodeConstants.*;
|
|||||||
*/
|
*/
|
||||||
public class MyQrCodeUtil {
|
public class MyQrCodeUtil {
|
||||||
|
|
||||||
|
@Value("${config.upload-path}")
|
||||||
|
private static String uploadPath;
|
||||||
|
|
||||||
private static final String logoUrl = "https://file.wsdns.cn/20230430/6fa31aca3b0d47af98a149cf2dd26a4f.jpeg";
|
private static final String logoUrl = "https://file.wsdns.cn/20230430/6fa31aca3b0d47af98a149cf2dd26a4f.jpeg";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,7 +64,7 @@ public class MyQrCodeUtil {
|
|||||||
* @return 二维码图片地址
|
* @return 二维码图片地址
|
||||||
*/
|
*/
|
||||||
public static String createQrCode(String type,Integer id, String content) throws IOException {
|
public static String createQrCode(String type,Integer id, String content) throws IOException {
|
||||||
String filePath = "/www/wwwroot/file.ws/file/qrcode/".concat(type).concat("/");
|
String filePath = uploadPath + "/file/qrcode/".concat(type).concat("/");
|
||||||
String qrcodeUrl = "https://file.websoft.top/qrcode/".concat(type).concat("/");
|
String qrcodeUrl = "https://file.websoft.top/qrcode/".concat(type).concat("/");
|
||||||
// 将URL转为BufferedImage
|
// 将URL转为BufferedImage
|
||||||
BufferedImage bufferedImage = ImageIO.read(new URL(logoUrl));
|
BufferedImage bufferedImage = ImageIO.read(new URL(logoUrl));
|
||||||
|
|||||||
@@ -3,12 +3,13 @@ package com.gxwebsoft.common.core.utils;
|
|||||||
import com.gxwebsoft.common.core.config.CertificateProperties;
|
import com.gxwebsoft.common.core.config.CertificateProperties;
|
||||||
import com.gxwebsoft.common.system.entity.Payment;
|
import com.gxwebsoft.common.system.entity.Payment;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 微信支付配置验证工具
|
* 微信支付配置验证工具
|
||||||
*
|
*
|
||||||
* @author 科技小王子
|
* @author 科技小王子
|
||||||
* @since 2025-07-27
|
* @since 2025-07-27
|
||||||
*/
|
*/
|
||||||
@@ -19,6 +20,9 @@ public class WechatPayConfigValidator {
|
|||||||
private final CertificateProperties certConfig;
|
private final CertificateProperties certConfig;
|
||||||
private final CertificateLoader certificateLoader;
|
private final CertificateLoader certificateLoader;
|
||||||
|
|
||||||
|
@Value("${spring.profiles.active}")
|
||||||
|
private String activeProfile;
|
||||||
|
|
||||||
public WechatPayConfigValidator(CertificateProperties certConfig, CertificateLoader certificateLoader) {
|
public WechatPayConfigValidator(CertificateProperties certConfig, CertificateLoader certificateLoader) {
|
||||||
this.certConfig = certConfig;
|
this.certConfig = certConfig;
|
||||||
this.certificateLoader = certificateLoader;
|
this.certificateLoader = certificateLoader;
|
||||||
@@ -26,34 +30,34 @@ public class WechatPayConfigValidator {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证微信支付配置
|
* 验证微信支付配置
|
||||||
*
|
*
|
||||||
* @param payment 支付配置
|
* @param payment 支付配置
|
||||||
* @param tenantId 租户ID
|
* @param tenantId 租户ID
|
||||||
* @return 验证结果
|
* @return 验证结果
|
||||||
*/
|
*/
|
||||||
public ValidationResult validateWechatPayConfig(Payment payment, Integer tenantId) {
|
public ValidationResult validateWechatPayConfig(Payment payment, Integer tenantId) {
|
||||||
ValidationResult result = new ValidationResult();
|
ValidationResult result = new ValidationResult();
|
||||||
|
|
||||||
log.info("开始验证微信支付配置 - 租户ID: {}", tenantId);
|
log.info("开始验证微信支付配置 - 租户ID: {}", tenantId);
|
||||||
|
|
||||||
// 1. 验证基本配置
|
// 1. 验证基本配置
|
||||||
if (payment == null) {
|
if (payment == null) {
|
||||||
result.addError("支付配置为空");
|
result.addError("支付配置为空");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.hasText(payment.getMchId())) {
|
if (!StringUtils.hasText(payment.getMchId())) {
|
||||||
result.addError("商户号未配置");
|
result.addError("商户号未配置");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.hasText(payment.getAppId())) {
|
if (!StringUtils.hasText(payment.getAppId())) {
|
||||||
result.addError("应用ID未配置");
|
result.addError("应用ID未配置");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!StringUtils.hasText(payment.getMerchantSerialNumber())) {
|
if (!StringUtils.hasText(payment.getMerchantSerialNumber())) {
|
||||||
result.addError("商户证书序列号未配置");
|
result.addError("商户证书序列号未配置");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 验证 APIv3 密钥
|
// 2. 验证 APIv3 密钥
|
||||||
String apiV3Key = getValidApiV3Key(payment);
|
String apiV3Key = getValidApiV3Key(payment);
|
||||||
if (!StringUtils.hasText(apiV3Key)) {
|
if (!StringUtils.hasText(apiV3Key)) {
|
||||||
@@ -61,35 +65,35 @@ public class WechatPayConfigValidator {
|
|||||||
} else {
|
} else {
|
||||||
validateApiV3Key(apiV3Key, result);
|
validateApiV3Key(apiV3Key, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 验证证书文件
|
// 3. 验证证书文件
|
||||||
validateCertificateFiles(tenantId, result);
|
validateCertificateFiles(tenantId, result);
|
||||||
|
|
||||||
// 4. 记录验证结果
|
// 4. 记录验证结果
|
||||||
if (result.isValid()) {
|
if (result.isValid()) {
|
||||||
log.info("✅ 微信支付配置验证通过 - 租户ID: {}", tenantId);
|
log.info("✅ 微信支付配置验证通过 - 租户ID: {}", tenantId);
|
||||||
} else {
|
} else {
|
||||||
log.error("❌ 微信支付配置验证失败 - 租户ID: {}, 错误: {}", tenantId, result.getErrors());
|
log.error("❌ 微信支付配置验证失败 - 租户ID: {}, 错误: {}", tenantId, result.getErrors());
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取有效的 APIv3 密钥
|
* 获取有效的 APIv3 密钥
|
||||||
* 优先使用数据库配置,如果为空则使用配置文件默认值
|
* 优先使用数据库配置,如果为空则使用配置文件默认值
|
||||||
*/
|
*/
|
||||||
public String getValidApiV3Key(Payment payment) {
|
public String getValidApiV3Key(Payment payment) {
|
||||||
String apiV3Key = payment.getApiKey();
|
String apiV3Key = payment.getApiKey();
|
||||||
|
|
||||||
if (!StringUtils.hasText(apiV3Key)) {
|
if (!StringUtils.hasText(apiV3Key)) {
|
||||||
apiV3Key = certConfig.getWechatPay().getDev().getApiV3Key();
|
apiV3Key = certConfig.getWechatPay().getDev().getApiV3Key();
|
||||||
log.warn("数据库中APIv3密钥为空,使用配置文件默认值");
|
log.warn("数据库中APIv3密钥为空,使用配置文件默认值");
|
||||||
}
|
}
|
||||||
|
|
||||||
return apiV3Key;
|
return apiV3Key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证 APIv3 密钥格式
|
* 验证 APIv3 密钥格式
|
||||||
*/
|
*/
|
||||||
@@ -97,43 +101,49 @@ public class WechatPayConfigValidator {
|
|||||||
if (apiV3Key.length() != 32) {
|
if (apiV3Key.length() != 32) {
|
||||||
result.addError("APIv3密钥长度错误,应为32位,实际为: " + apiV3Key.length());
|
result.addError("APIv3密钥长度错误,应为32位,实际为: " + apiV3Key.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!apiV3Key.matches("^[a-zA-Z0-9]+$")) {
|
if (!apiV3Key.matches("^[a-zA-Z0-9]+$")) {
|
||||||
result.addError("APIv3密钥格式错误,应仅包含字母和数字");
|
result.addError("APIv3密钥格式错误,应仅包含字母和数字");
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("APIv3密钥验证 - 长度: {}, 格式: {}",
|
log.info("APIv3密钥验证 - 长度: {}, 格式: {}",
|
||||||
apiV3Key.length(),
|
apiV3Key.length(),
|
||||||
apiV3Key.matches("^[a-zA-Z0-9]+$") ? "正确" : "错误");
|
apiV3Key.matches("^[a-zA-Z0-9]+$") ? "正确" : "错误");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证证书文件
|
* 验证证书文件
|
||||||
*/
|
*/
|
||||||
private void validateCertificateFiles(Integer tenantId, ValidationResult result) {
|
private void validateCertificateFiles(Integer tenantId, ValidationResult result) {
|
||||||
String tenantCertPath = "dev/wechat/" + tenantId;
|
if ("dev".equals(activeProfile)) {
|
||||||
String privateKeyPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getPrivateKeyFile();
|
// 开发环境证书验证
|
||||||
|
String tenantCertPath = "dev/wechat/" + tenantId;
|
||||||
if (!certificateLoader.certificateExists(privateKeyPath)) {
|
String privateKeyPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getPrivateKeyFile();
|
||||||
result.addError("证书文件不存在: " + privateKeyPath);
|
|
||||||
return;
|
if (!certificateLoader.certificateExists(privateKeyPath)) {
|
||||||
}
|
result.addError("证书文件不存在: " + privateKeyPath);
|
||||||
|
return;
|
||||||
try {
|
}
|
||||||
String privateKey = certificateLoader.loadCertificatePath(privateKeyPath);
|
|
||||||
log.info("✅ 证书文件验证通过: {}", privateKey);
|
try {
|
||||||
} catch (Exception e) {
|
certificateLoader.loadCertificatePath(privateKeyPath);
|
||||||
result.addError("证书文件加载失败: " + e.getMessage());
|
log.info("✅ 开发环境证书文件验证通过: {}", privateKeyPath);
|
||||||
|
} catch (Exception e) {
|
||||||
|
result.addError("证书文件加载失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 生产环境证书验证 - 跳过文件存在性检查,因为证书路径来自数据库
|
||||||
|
log.info("✅ 生产环境跳过证书文件存在性验证,使用数据库配置的证书路径");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 验证结果类
|
* 验证结果类
|
||||||
*/
|
*/
|
||||||
public static class ValidationResult {
|
public static class ValidationResult {
|
||||||
private boolean valid = true;
|
private boolean valid = true;
|
||||||
private StringBuilder errors = new StringBuilder();
|
private StringBuilder errors = new StringBuilder();
|
||||||
|
|
||||||
public void addError(String error) {
|
public void addError(String error) {
|
||||||
this.valid = false;
|
this.valid = false;
|
||||||
if (errors.length() > 0) {
|
if (errors.length() > 0) {
|
||||||
@@ -141,22 +151,22 @@ public class WechatPayConfigValidator {
|
|||||||
}
|
}
|
||||||
errors.append(error);
|
errors.append(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isValid() {
|
public boolean isValid() {
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getErrors() {
|
public String getErrors() {
|
||||||
return errors.toString();
|
return errors.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void logErrors() {
|
public void logErrors() {
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
log.error("配置验证失败: {}", errors.toString());
|
log.error("配置验证失败: {}", errors.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 生成配置诊断报告
|
* 生成配置诊断报告
|
||||||
*/
|
*/
|
||||||
@@ -164,41 +174,50 @@ public class WechatPayConfigValidator {
|
|||||||
StringBuilder report = new StringBuilder();
|
StringBuilder report = new StringBuilder();
|
||||||
report.append("=== 微信支付配置诊断报告 ===\n");
|
report.append("=== 微信支付配置诊断报告 ===\n");
|
||||||
report.append("租户ID: ").append(tenantId).append("\n");
|
report.append("租户ID: ").append(tenantId).append("\n");
|
||||||
|
|
||||||
if (payment != null) {
|
if (payment != null) {
|
||||||
report.append("商户号: ").append(payment.getMchId()).append("\n");
|
report.append("商户号: ").append(payment.getMchId()).append("\n");
|
||||||
report.append("应用ID: ").append(payment.getAppId()).append("\n");
|
report.append("应用ID: ").append(payment.getAppId()).append("\n");
|
||||||
report.append("商户证书序列号: ").append(payment.getMerchantSerialNumber()).append("\n");
|
report.append("商户证书序列号: ").append(payment.getMerchantSerialNumber()).append("\n");
|
||||||
|
|
||||||
String dbApiKey = payment.getApiKey();
|
String dbApiKey = payment.getApiKey();
|
||||||
String configApiKey = certConfig.getWechatPay().getDev().getApiV3Key();
|
String configApiKey = certConfig.getWechatPay().getDev().getApiV3Key();
|
||||||
|
|
||||||
report.append("数据库APIv3密钥: ").append(dbApiKey != null ? "已配置(" + dbApiKey.length() + "位)" : "未配置").append("\n");
|
report.append("数据库APIv3密钥: ").append(dbApiKey != null ? "已配置(" + dbApiKey.length() + "位)" : "未配置").append("\n");
|
||||||
report.append("配置文件APIv3密钥: ").append(configApiKey != null ? "已配置(" + configApiKey.length() + "位)" : "未配置").append("\n");
|
report.append("配置文件APIv3密钥: ").append(configApiKey != null ? "已配置(" + configApiKey.length() + "位)" : "未配置").append("\n");
|
||||||
|
|
||||||
String finalApiKey = getValidApiV3Key(payment);
|
String finalApiKey = getValidApiV3Key(payment);
|
||||||
report.append("最终使用APIv3密钥: ").append(finalApiKey != null ? "已配置(" + finalApiKey.length() + "位)" : "未配置").append("\n");
|
report.append("最终使用APIv3密钥: ").append(finalApiKey != null ? "已配置(" + finalApiKey.length() + "位)" : "未配置").append("\n");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
report.append("❌ 支付配置为空\n");
|
report.append("❌ 支付配置为空\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 证书文件检查
|
// 证书文件检查
|
||||||
String tenantCertPath = "dev/wechat/" + tenantId;
|
report.append("当前环境: ").append(activeProfile).append("\n");
|
||||||
String privateKeyPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getPrivateKeyFile();
|
if ("dev".equals(activeProfile)) {
|
||||||
boolean certExists = certificateLoader.certificateExists(privateKeyPath);
|
String tenantCertPath = "dev/wechat/" + tenantId;
|
||||||
|
String privateKeyPath = tenantCertPath + "/" + certConfig.getWechatPay().getDev().getPrivateKeyFile();
|
||||||
report.append("证书文件路径: ").append(privateKeyPath).append("\n");
|
boolean certExists = certificateLoader.certificateExists(privateKeyPath);
|
||||||
report.append("证书文件存在: ").append(certExists ? "是" : "否").append("\n");
|
|
||||||
|
report.append("开发环境证书文件路径: ").append(privateKeyPath).append("\n");
|
||||||
|
report.append("证书文件存在: ").append(certExists ? "是" : "否").append("\n");
|
||||||
|
} else {
|
||||||
|
report.append("生产环境证书路径: 从数据库配置获取\n");
|
||||||
|
if (payment != null) {
|
||||||
|
report.append("私钥文件: ").append(payment.getApiclientKey()).append("\n");
|
||||||
|
report.append("证书文件: ").append(payment.getApiclientCert()).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ValidationResult validation = validateWechatPayConfig(payment, tenantId);
|
ValidationResult validation = validateWechatPayConfig(payment, tenantId);
|
||||||
report.append("配置验证结果: ").append(validation.isValid() ? "通过" : "失败").append("\n");
|
report.append("配置验证结果: ").append(validation.isValid() ? "通过" : "失败").append("\n");
|
||||||
if (!validation.isValid()) {
|
if (!validation.isValid()) {
|
||||||
report.append("验证错误: ").append(validation.getErrors()).append("\n");
|
report.append("验证错误: ").append(validation.getErrors()).append("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
report.append("=== 诊断报告结束 ===");
|
report.append("=== 诊断报告结束 ===");
|
||||||
|
|
||||||
return report.toString();
|
return report.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ public class HouseInfoServiceImpl extends ServiceImpl<HouseInfoMapper, HouseInfo
|
|||||||
combiner.combine();
|
combiner.combine();
|
||||||
|
|
||||||
// 创建保存目录
|
// 创建保存目录
|
||||||
String posterDir = uploadPath + "file/poster/" + houseInfo.getTenantId() + "/house";
|
String posterDir = uploadPath + "/file/poster/" + houseInfo.getTenantId() + "/house";
|
||||||
if (!FileUtil.exist(posterDir)) {
|
if (!FileUtil.exist(posterDir)) {
|
||||||
FileUtil.mkdir(posterDir);
|
FileUtil.mkdir(posterDir);
|
||||||
}
|
}
|
||||||
@@ -190,8 +190,8 @@ public class HouseInfoServiceImpl extends ServiceImpl<HouseInfoMapper, HouseInfo
|
|||||||
// 生成文件路径
|
// 生成文件路径
|
||||||
String basePath = "/poster/" + houseInfo.getTenantId() + "/house/big-" + houseInfo.getHouseId() + ".jpg";
|
String basePath = "/poster/" + houseInfo.getTenantId() + "/house/big-" + houseInfo.getHouseId() + ".jpg";
|
||||||
String smallPath = "/poster/" + houseInfo.getTenantId() + "/house/" + houseInfo.getHouseId() + ".jpg";
|
String smallPath = "/poster/" + houseInfo.getTenantId() + "/house/" + houseInfo.getHouseId() + ".jpg";
|
||||||
String filename = uploadPath + "file" + basePath;
|
String filename = uploadPath + "/file" + basePath;
|
||||||
String smallFileName = uploadPath + "file" + smallPath;
|
String smallFileName = uploadPath + "/file" + smallPath;
|
||||||
|
|
||||||
// 保存原图
|
// 保存原图
|
||||||
combiner.save(filename);
|
combiner.save(filename);
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ public class OrderBusinessService {
|
|||||||
*/
|
*/
|
||||||
private BigDecimal validateAndCalculateTotal(OrderCreateRequest request) {
|
private BigDecimal validateAndCalculateTotal(OrderCreateRequest request) {
|
||||||
if (CollectionUtils.isEmpty(request.getGoodsItems())) {
|
if (CollectionUtils.isEmpty(request.getGoodsItems())) {
|
||||||
throw new BusinessException("订单商品列表不能为空");
|
throw new BusinessException("订单商品列表不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
BigDecimal total = BigDecimal.ZERO;
|
BigDecimal total = BigDecimal.ZERO;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ mqtt:
|
|||||||
config:
|
config:
|
||||||
# 生产环境接口
|
# 生产环境接口
|
||||||
server-url: https://server.websoft.top/api
|
server-url: https://server.websoft.top/api
|
||||||
upload-path: /www/wwwroot/file.ws/
|
upload-path: /www/wwwroot/file.ws
|
||||||
|
|
||||||
# 阿里云OSS云存储
|
# 阿里云OSS云存储
|
||||||
endpoint: https://oss-cn-shenzhen.aliyuncs.com
|
endpoint: https://oss-cn-shenzhen.aliyuncs.com
|
||||||
|
|||||||
Reference in New Issue
Block a user