订单/退款查询条件修订;修改logback日志;修订配置文件;隐藏普通管理员查询系统品牌管理
This commit is contained in:
parent
0376bf1453
commit
2ef8150f19
@ -187,7 +187,7 @@ public interface Constants {
|
||||
/**
|
||||
* 隐藏菜单
|
||||
*/
|
||||
String HIDE_MENU = "Menu";
|
||||
String HIDE_MENU = "Menu,Brand";
|
||||
|
||||
/**
|
||||
* 用户类型
|
||||
|
||||
@ -2,6 +2,7 @@ package com.cpop.core.handler;
|
||||
|
||||
import com.cpop.core.base.exception.UtilException;
|
||||
import com.cpop.core.config.TencentCosProperties;
|
||||
import com.qcloud.cos.COS;
|
||||
import com.qcloud.cos.COSClient;
|
||||
import com.qcloud.cos.ClientConfig;
|
||||
import com.qcloud.cos.auth.BasicCOSCredentials;
|
||||
@ -20,6 +21,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
@ -40,13 +42,16 @@ public class TencentCosHandler {
|
||||
@Autowired
|
||||
private TencentCosProperties properties;
|
||||
|
||||
private TransferManager transferManager;
|
||||
|
||||
/**
|
||||
* @descriptions 创建 TransferManager 实例,这个实例用来后续调用高级接口
|
||||
* @descriptions 初始化创建TransferManager 实例,这个实例用来后续调用高级接口
|
||||
* @author DB
|
||||
* @date 2023/10/31 16:48
|
||||
* @return: com.qcloud.cos.transfer.TransferManager
|
||||
* @date 2023/11/01 10:34
|
||||
* @return: void
|
||||
*/
|
||||
private TransferManager createTransferManager() {
|
||||
@PostConstruct
|
||||
public void createTransferManager(){
|
||||
// 创建一个 COSClient 实例,这是访问 COS 服务的基础实例。
|
||||
// 详细代码参见本页: 简单操作 -> 创建 COSClient
|
||||
COSClient cosClient = createCosClient();
|
||||
@ -54,14 +59,13 @@ public class TencentCosHandler {
|
||||
// 对于使用公网传输且网络带宽质量不高的情况,建议减小该值,避免因网速过慢,造成请求超时。
|
||||
ExecutorService threadPool = Executors.newFixedThreadPool(32);
|
||||
// 传入一个 threadPool, 若不传入线程池,默认 TransferManager 中会生成一个单线程的线程池。
|
||||
TransferManager transferManager = new TransferManager(cosClient, threadPool);
|
||||
transferManager = new TransferManager(cosClient, threadPool);
|
||||
// 设置高级接口的配置项
|
||||
// 分块上传阈值和分块大小分别为 5MB 和 1MB
|
||||
TransferManagerConfiguration transferManagerConfiguration = new TransferManagerConfiguration();
|
||||
transferManagerConfiguration.setMultipartUploadThreshold(5 * 1024 * 1024);
|
||||
transferManagerConfiguration.setMinimumUploadPartSize(1 * 1024 * 1024);
|
||||
transferManager.setConfiguration(transferManagerConfiguration);
|
||||
return transferManager;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,7 +110,7 @@ public class TencentCosHandler {
|
||||
* @param transferManager 管理器
|
||||
* @return: void
|
||||
*/
|
||||
private void shutdownTransferManager(TransferManager transferManager) {
|
||||
public void shutdownTransferManager(TransferManager transferManager) {
|
||||
// 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。
|
||||
// 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。
|
||||
transferManager.shutdownNow(true);
|
||||
@ -120,7 +124,6 @@ public class TencentCosHandler {
|
||||
* @return: com.qcloud.cos.model.UploadResult
|
||||
*/
|
||||
public UploadResult cdnUpload(MultipartFile file) {
|
||||
TransferManager transferManager = createTransferManager();
|
||||
try {
|
||||
ObjectMetadata objectMetadata = new ObjectMetadata();
|
||||
// 上传的流如果能够获取准确的流长度,则推荐一定填写 content-length
|
||||
@ -133,12 +136,11 @@ public class TencentCosHandler {
|
||||
// 更多存储类型请参见 https://cloud.tencent.com/document/product/436/33417
|
||||
putObjectRequest.setStorageClass(StorageClass.Standard_IA);
|
||||
Upload upload = transferManager.upload(putObjectRequest);
|
||||
UploadResult uploadResult = upload.waitForUploadResult();
|
||||
inputStream.close();
|
||||
return upload.waitForUploadResult();
|
||||
return uploadResult;
|
||||
} catch (IOException | InterruptedException e) {
|
||||
throw new UtilException(e);
|
||||
} finally {
|
||||
shutdownTransferManager(transferManager);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -104,7 +104,13 @@ logging:
|
||||
#微信支付
|
||||
wx:
|
||||
pay:
|
||||
#通知地址
|
||||
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||
keyPath: E:/Cpop/Cpop-Union/Cpop-Mall/Cpop-Mall-Web/src/main/resources/static/keyPair/wxPay_cert.p12
|
||||
# 私钥证书
|
||||
privateKeyPath: E:/Cpop/Cpop-Union/Cpop-Mall/Cpop-Mall-Web/src/main/resources/static/keyPair/wxPay_key.pem
|
||||
# 私钥文件
|
||||
privateCertPath: E:/Cpop/Cpop-Union/Cpop-Mall/Cpop-Mall-Web/src/main/resources/static/keyPair/wxPay_cert.pem
|
||||
#支付通知地址
|
||||
notifyUrl: https://frp-oak.top:11899/Cpop-Mall/wxPay/callback/notify/order
|
||||
#支付成功
|
||||
#退款通知地址
|
||||
notifyRefund: https://frp-oak.top:11899/Cpop-Mall/wxPay/callback/notify/refund
|
||||
@ -75,7 +75,13 @@ logging:
|
||||
#微信支付
|
||||
wx:
|
||||
pay:
|
||||
#通知地址
|
||||
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||
keyPath: /root/cpop-union/cpop-mall/script/secretKey/wxPay_cert.p12
|
||||
# 私钥证书
|
||||
privateKeyPath: /root/cpop-union/cpop-mall/script/secretKey/wxPay_key.pem
|
||||
# 私钥文件
|
||||
privateCertPath: /root/cpop-union/cpop-mall/script/secretKey/wxPay_cert.pem
|
||||
#支付通知地址
|
||||
notifyUrl: https://test.cpopsz.com/onlineShop/Cpop-Mall/wxPay/callback/notify/order
|
||||
#支付成功
|
||||
#退款通知地址
|
||||
notifyRefund: https://test.cpopsz.com/onlineShop/Cpop-Mall/wxPay/callback/notify/refund
|
||||
@ -105,7 +105,13 @@ logging:
|
||||
#微信支付
|
||||
wx:
|
||||
pay:
|
||||
#通知地址
|
||||
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||
keyPath: /root/cpop-union/cpop-mall/script/secretKey/wxPay_cert.p12
|
||||
# 私钥证书
|
||||
privateKeyPath: /root/cpop-union/cpop-mall/script/secretKey/wxPay_key.pem
|
||||
# 私钥文件
|
||||
privateCertPath: /root/cpop-union/cpop-mall/script/secretKey/wxPay_cert.pem
|
||||
#支付通知地址
|
||||
notifyUrl: https://test.cpopsz.com/onlineShop/Cpop-Mall/wxPay/callback/notify/order
|
||||
#支付成功
|
||||
#退款通知地址
|
||||
notifyRefund: https://test.cpopsz.com/onlineShop/Cpop-Mall/wxPay/callback/notify/refund
|
||||
@ -137,5 +137,3 @@ wx:
|
||||
#微信支付商户密钥
|
||||
mchKey: JamBox20230919174000000000000002
|
||||
apiV3Key: JamBox20230919174000000000000002
|
||||
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
|
||||
keyPath:
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<configuration scan="true" scanPeriod="10 seconds">
|
||||
<!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
|
||||
<!--定义日志文件的存储地址和前缀名-->
|
||||
<property name="LOG_HOME" value="."/>
|
||||
<property name="LOG_HOME" value="./logs"/>
|
||||
<property name="LOG_PREFIX" value="Cpop-Mall"/>
|
||||
|
||||
<!--控制台输出 -->
|
||||
@ -16,49 +16,55 @@
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<File>${LOG_HOME}/${LOG_PREFIX}-info.log</File>
|
||||
<append>true</append>
|
||||
<!--过滤器,只打INFO级别的日志-->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>INFO</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_HOME}/${LOG_PREFIX}-info-%d{yyyyMMdd}.log.%d</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder charset="UTF-8">
|
||||
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
<springProfile name="test,prod">
|
||||
<appender name="SYS_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<File>${LOG_HOME}/${LOG_PREFIX}-info.log</File>
|
||||
<append>true</append>
|
||||
<!--过滤器,只打INFO级别的日志-->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>INFO</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_HOME}/${LOG_PREFIX}-info-%d{yyyyMMdd}.log.%d</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder charset="UTF-8">
|
||||
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<File>${LOG_HOME}/${LOG_PREFIX}-error.log</File>
|
||||
<append>true</append>
|
||||
<!--过滤器,只打ERROR级别的日志-->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_HOME}/${LOG_PREFIX}-error-%d{yyyyMMdd}.log.%d</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder charset="UTF-8">
|
||||
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
<appender name="SYS_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<File>${LOG_HOME}/${LOG_PREFIX}-error.log</File>
|
||||
<append>true</append>
|
||||
<!--过滤器,只打ERROR级别的日志-->
|
||||
<filter class="ch.qos.logback.classic.filter.LevelFilter">
|
||||
<level>ERROR</level>
|
||||
<onMatch>ACCEPT</onMatch>
|
||||
<onMismatch>DENY</onMismatch>
|
||||
</filter>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_HOME}/${LOG_PREFIX}-error-%d{yyyyMMdd}.log.%d</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder charset="UTF-8">
|
||||
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n</pattern>
|
||||
<charset>UTF-8</charset>
|
||||
</encoder>
|
||||
</appender>
|
||||
</springProfile>
|
||||
|
||||
<!--info和error分开打印-->
|
||||
<root level="INFO">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
<appender-ref ref="SYS_INFO"/>
|
||||
<appender-ref ref="SYS_ERROR"/>
|
||||
<springProfile name="dev">
|
||||
<appender-ref ref="CONSOLE"/>
|
||||
</springProfile>
|
||||
<springProfile name="test,prod">
|
||||
<appender-ref ref="SYS_INFO"/>
|
||||
<appender-ref ref="SYS_ERROR"/>
|
||||
</springProfile>
|
||||
</root>
|
||||
<logger name="com.cpop.mall" level="DEBUG"/>
|
||||
</configuration>
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
package com.cpop.mall.web;
|
||||
|
||||
import com.cpop.mall.business.service.ProductRecordService;
|
||||
import org.checkerframework.checker.units.qual.A;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* @author DB
|
||||
* @createTime 2023/11/01 12:25
|
||||
* @description 订单测试
|
||||
*/
|
||||
@SpringBootTest
|
||||
public class OrderTests {
|
||||
|
||||
@Autowired
|
||||
private ProductRecordService productRecordService;
|
||||
|
||||
/**
|
||||
* @descriptions 并发更新库存
|
||||
* @author DB
|
||||
* @date 2023/11/01 12:26
|
||||
* @return: void
|
||||
*/
|
||||
@Test
|
||||
public void concurrencyUpdateStock(){
|
||||
ExecutorService threadPool = Executors.newFixedThreadPool(10);
|
||||
for (int i = 0; i < 100; i++) {
|
||||
threadPool.submit(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println(Thread.currentThread().getName() + "正在执行任务");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -30,10 +30,10 @@ public class OrderPageBo implements Serializable {
|
||||
private String payUserName;
|
||||
|
||||
/**
|
||||
* 支付用户手机号
|
||||
* 接收人手机号
|
||||
*/
|
||||
@ApiModelProperty("支付用户手机号")
|
||||
private String payUserPhone;
|
||||
@ApiModelProperty("接收人手机号")
|
||||
private String receivePhone;
|
||||
|
||||
/**
|
||||
* 订单状态(0:待付款;1:待发货;2:待确认;3:已完成;4:退款/售后中)
|
||||
|
||||
@ -30,10 +30,10 @@ public class OrderRefundPageBo implements Serializable {
|
||||
private String payUserName;
|
||||
|
||||
/**
|
||||
* 支付用户手机号
|
||||
* 接收人手机号
|
||||
*/
|
||||
@ApiModelProperty("支付用户手机号")
|
||||
private String payUserPhone;
|
||||
@ApiModelProperty("接收人手机号")
|
||||
private String receivePhone;
|
||||
|
||||
/**
|
||||
* 退款状态(0:申请中;1:通过;2:驳回)
|
||||
|
||||
@ -130,7 +130,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
||||
return this.mapper.paginateAs(pageDomain.getPageNum(),pageDomain.getPageSize(),
|
||||
queryWrapper.select(ORDER_REFUND.REFUND_STATUS,ORDER_REFUND.REFUND_REASON,ORDER_REFUND.ID,ORDER_REFUND.ORDER_ID,ORDER_REFUND.CREATE_TIME)
|
||||
//订单相关参数
|
||||
.select(ORDER.ORDER_STATUS,ORDER.OUT_ORDER_NO,ORDER.PRODUCT_NAMES,ORDER.TOTAL_AMOUNT,ORDER.PAY_USER_NAME,ORDER.BRAND_ID,ORDER.RECEIVE_NAME,
|
||||
.select(ORDER.ORDER_STATUS,ORDER.OUT_ORDER_NO,ORDER.PAY_USER_ID,ORDER.PRODUCT_NAMES,ORDER.TOTAL_AMOUNT,ORDER.PAY_USER_NAME,ORDER.BRAND_ID,ORDER.RECEIVE_NAME,
|
||||
ORDER.RECEIVE_PHONE,ORDER.RECEIVE_ADDRESS,ORDER.LOGISTICS_ORDER,ORDER.REMARKS)
|
||||
//品牌/店铺或校区
|
||||
.select(BRAND.BRAND_NAME)
|
||||
@ -140,7 +140,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
|
||||
.leftJoin(BRAND).on(BRAND.ID.eq(ORDER.BRAND_ID))
|
||||
.and(ORDER.PRODUCT_NAMES.like(bo.getProductName()))
|
||||
.and(ORDER.PAY_USER_NAME.like(bo.getPayUserName()))
|
||||
.and(SYS_USER.PHONE_NUMBER.eq(bo.getPayUserPhone())),
|
||||
.and(ORDER.RECEIVE_PHONE.like(bo.getReceivePhone())),
|
||||
OrderRefundPageVo.class);
|
||||
}
|
||||
|
||||
|
||||
@ -93,7 +93,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
.from(ORDER)
|
||||
.leftJoin(SYS_USER).on(SYS_USER.ID.eq(ORDER.PAY_USER_ID))
|
||||
.and(ORDER.PAY_USER_NAME.like(bo.getPayUserName()))
|
||||
.and(SYS_USER.PHONE_NUMBER.eq(bo.getPayUserPhone()))
|
||||
.and(ORDER.RECEIVE_PHONE.like(bo.getReceivePhone()))
|
||||
.and(ORDER.PRODUCT_NAMES.like(bo.getProductName()))
|
||||
//订单状态
|
||||
.and(ORDER.ORDER_STATUS.eq(bo.getOrderStatus()))
|
||||
@ -303,8 +303,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
WxPayOrderNotifyResult notifyResult = wxPayService.parseOrderNotifyResult(xmlData);
|
||||
String orderId = notifyResult.getOutTradeNo();
|
||||
//修改订单状态
|
||||
this.updateChain()
|
||||
.set(ORDER.OUT_ORDER_NO, notifyResult.getTransactionId())
|
||||
this.updateChain().set(ORDER.OUT_ORDER_NO, notifyResult.getTransactionId())
|
||||
.set(ORDER.ORDER_STATUS, 1).where(ORDER.ID.eq(orderId)).update();
|
||||
//支付成功减库存
|
||||
List<OrderDetail> orderDetails = SpringUtils.getBean(OrderDetailService.class).queryChain()
|
||||
@ -316,7 +315,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
productRecords.forEach(item -> {
|
||||
item.setRecordNum(item.getRecordNum() - orderNumMap.get(item.getId()));
|
||||
});
|
||||
asyncUpdateRecords(productRecords,0);
|
||||
productRecordService.updateBatch(productRecords);
|
||||
//TODO:分账先注释
|
||||
/*ProfitSharing profitSharing = new ProfitSharing();
|
||||
profitSharing.setOrderId(orderId)
|
||||
@ -350,7 +349,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
* @Description: 异步更新数据库
|
||||
* @param productRecords 产品记录
|
||||
* @param flag 成功标志
|
||||
* @return
|
||||
* @Author DB
|
||||
* @Date: 2023/11/1 0:09
|
||||
*/
|
||||
@ -362,7 +360,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
||||
throw new ServiceException("更新订单失败");
|
||||
} else {
|
||||
boolean tx = Db.tx(() -> productRecordService.updateBatch(productRecords));
|
||||
if (!tx){
|
||||
if (!tx) {
|
||||
//更新失败
|
||||
flag++;
|
||||
asyncUpdateRecords(productRecords, flag);
|
||||
|
||||
@ -225,7 +225,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
|
||||
.leftJoin(ROLE).on(ROLE.ID.eq(ROLE_MENU.ROLE_ID))
|
||||
.where(MENU.STATUS.eq(1))
|
||||
.and(MENU.TYPE.in(0, 1))
|
||||
.and(MENU.NAME.ne(Constants.HIDE_MENU))
|
||||
.and(MENU.NAME.notIn(Constants.HIDE_MENU.split(",")))
|
||||
.and(ROLE_MENU.ROLE_ID.eq(staffInfo.getRoleId()))
|
||||
.orderBy(MENU.ORDER_NO.asc()),
|
||||
MenuRouteVo.class));
|
||||
|
||||
@ -63,7 +63,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
|
||||
.leftJoin(ROLE).on(ROLE.ID.eq(ROLE_MENU.ROLE_ID))
|
||||
.where(MENU.STATUS.eq(1))
|
||||
.and(MENU.TYPE.in(0, 1))
|
||||
.and(MENU.NAME.ne(Constants.HIDE_MENU))
|
||||
.and(MENU.NAME.notIn(Constants.HIDE_MENU.split(",")))
|
||||
.and(ROLE_MENU.ROLE_ID.eq(loginStaffInfo.getString("roleId")))
|
||||
//构建公共菜单与特有菜单
|
||||
.and(MENU.USER_TYPE.in("COMMON", user.getUserType()))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user