diff --git a/Cpop-Common/src/main/java/com/cpop/common/constant/Constants.java b/Cpop-Common/src/main/java/com/cpop/common/constant/Constants.java index b1f32fb..2b97c40 100644 --- a/Cpop-Common/src/main/java/com/cpop/common/constant/Constants.java +++ b/Cpop-Common/src/main/java/com/cpop/common/constant/Constants.java @@ -187,7 +187,7 @@ public interface Constants { /** * 隐藏菜单 */ - String HIDE_MENU = "Menu"; + String HIDE_MENU = "Menu,Brand"; /** * 用户类型 diff --git a/Cpop-Core/src/main/java/com/cpop/core/handler/TencentCosHandler.java b/Cpop-Core/src/main/java/com/cpop/core/handler/TencentCosHandler.java index ed86c5a..63c65be 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/handler/TencentCosHandler.java +++ b/Cpop-Core/src/main/java/com/cpop/core/handler/TencentCosHandler.java @@ -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); } } diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml index 4c65ecb..9058f48 100644 --- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml +++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dev.yml @@ -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 \ No newline at end of file diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml index 3554e3b..7b8880a 100644 --- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml +++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-prod.yml @@ -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 \ No newline at end of file diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml index f1e19be..6ccd3e1 100644 --- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml +++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-test.yml @@ -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 \ No newline at end of file diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application.yml index d9036c8..b2aa4c8 100644 --- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application.yml +++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application.yml @@ -137,5 +137,3 @@ wx: #微信支付商户密钥 mchKey: JamBox20230919174000000000000002 apiV3Key: JamBox20230919174000000000000002 - # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头) - keyPath: diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/logback.xml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/logback.xml index 53bd533..63c0cbf 100644 --- a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/logback.xml +++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/logback.xml @@ -4,7 +4,7 @@ - + @@ -16,49 +16,55 @@ - - ${LOG_HOME}/${LOG_PREFIX}-info.log - true - - - INFO - ACCEPT - DENY - - - ${LOG_HOME}/${LOG_PREFIX}-info-%d{yyyyMMdd}.log.%d - 7 - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n - UTF-8 - - + + + ${LOG_HOME}/${LOG_PREFIX}-info.log + true + + + INFO + ACCEPT + DENY + + + ${LOG_HOME}/${LOG_PREFIX}-info-%d{yyyyMMdd}.log.%d + 7 + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n + UTF-8 + + - - ${LOG_HOME}/${LOG_PREFIX}-error.log - true - - - ERROR - ACCEPT - DENY - - - ${LOG_HOME}/${LOG_PREFIX}-error-%d{yyyyMMdd}.log.%d - 7 - - - [%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n - UTF-8 - - + + ${LOG_HOME}/${LOG_PREFIX}-error.log + true + + + ERROR + ACCEPT + DENY + + + ${LOG_HOME}/${LOG_PREFIX}-error-%d{yyyyMMdd}.log.%d + 7 + + + [%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [%thread] %file:%line - %msg%n + UTF-8 + + + - - - + + + + + + + diff --git a/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/OrderTests.java b/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/OrderTests.java new file mode 100644 index 0000000..a2bef6a --- /dev/null +++ b/Cpop-Mall/Cpop-Mall-Web/src/test/java/com/cpop/mall/web/OrderTests.java @@ -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() + "正在执行任务"); + } + }); + } + } +} diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderPageBo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderPageBo.java index 5987fc6..04fb7b1 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderPageBo.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderPageBo.java @@ -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:退款/售后中) diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderRefundPageBo.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderRefundPageBo.java index 028413c..de85af9 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderRefundPageBo.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/bo/OrderRefundPageBo.java @@ -30,10 +30,10 @@ public class OrderRefundPageBo implements Serializable { private String payUserName; /** - * 支付用户手机号 + * 接收人手机号 */ - @ApiModelProperty("支付用户手机号") - private String payUserPhone; + @ApiModelProperty("接收人手机号") + private String receivePhone; /** * 退款状态(0:申请中;1:通过;2:驳回) diff --git a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java index 24a96d3..973dfde 100644 --- a/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java +++ b/Cpop-Mall/src/main/java/com/cpop/mall/business/service/impl/OrderRefundServiceImpl.java @@ -130,7 +130,7 @@ public class OrderRefundServiceImpl extends ServiceImpl 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 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 orderDetails = SpringUtils.getBean(OrderDetailService.class).queryChain() @@ -316,7 +315,7 @@ public class OrderServiceImpl extends ServiceImpl 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 implements * @Description: 异步更新数据库 * @param productRecords 产品记录 * @param flag 成功标志 - * @return * @Author DB * @Date: 2023/11/1 0:09 */ @@ -362,7 +360,7 @@ public class OrderServiceImpl extends ServiceImpl implements throw new ServiceException("更新订单失败"); } else { boolean tx = Db.tx(() -> productRecordService.updateBatch(productRecords)); - if (!tx){ + if (!tx) { //更新失败 flag++; asyncUpdateRecords(productRecords, flag); diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java index 129c642..af1d78a 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/MenuServiceImpl.java @@ -225,7 +225,7 @@ public class MenuServiceImpl extends ServiceImpl 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)); diff --git a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/MenuServiceImpl.java b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/MenuServiceImpl.java index 25b69c0..27f1205 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/service/impl/MenuServiceImpl.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/service/impl/MenuServiceImpl.java @@ -63,7 +63,7 @@ public class MenuServiceImpl extends ServiceImpl 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()))