feat(order): 增加订单商品销量更新功能

- 修改订单支付成功逻辑,增加商品销量更新调用- 在 OrderItemService 中新增 addSaleNum 方法用于批量更新商品销量
- 在 ProductMapper 中新增 updateSales 方法实现销量累加
- 调整常量 ORDER_CANCEL_TIME从15分钟延长至30分钟
- 移除冗余的类导入和无用注解
- 更新 AppMemberController 关注相关接口的日志标题与描述
This commit is contained in:
huk 2025-10-10 16:40:49 +08:00
parent 841074baeb
commit e1d24e1ae7
7 changed files with 31 additions and 12 deletions

View File

@ -27,14 +27,12 @@ import com.wzj.soopin.transaction.convert.WithdrawConvert;
import com.wzj.soopin.transaction.domain.bo.ChargeBO;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.transaction.domain.entity.InitiateBatchTransferResponseNew;
import com.wzj.soopin.transaction.domain.entity.WxAuthResponse;
import com.wzj.soopin.transaction.domain.po.Withdraw;
import com.wzj.soopin.transaction.enums.WithdrawType;
import com.wzj.soopin.transaction.service.IAccountBillService;
import com.wzj.soopin.transaction.service.IChargeService;
import com.wzj.soopin.transaction.service.IWithdrawService;
import com.wzj.soopin.transaction.service.impl.WxAuthService;
import com.wzj.soopin.transaction.service.impl.WxPayService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@ -52,11 +50,8 @@ import org.dromara.common.ratelimiter.annotation.RateLimiter;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.social.config.properties.SocialProperties;
import org.dromara.common.social.utils.SocialUtils;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@RestController
@RequestMapping("/app/member")
@Tag(name = "会员管理")
@ -244,8 +239,8 @@ public class AppMemberController {
@Operation(summary = "用户注销")
@Log(title = "用户注销 ", businessType = BusinessType.UPDATE)
@Operation(summary = "关注用户")
@Log(title = "关注用户 ", businessType = BusinessType.UPDATE)
@PostMapping("/follow")
public R follow(@RequestParam Long vloggerId) {
LoginUser loginUser= LoginHelper.getLoginUser();
@ -255,8 +250,8 @@ public class AppMemberController {
fansService.doFollow(loginUser.getUserId(), vloggerId);
return R.ok();
}
@Operation(summary = "用户注销")
@Log(title = "用户注销 ", businessType = BusinessType.UPDATE)
@Operation(summary = "取消关注")
@Log(title = "取消关注 ", businessType = BusinessType.UPDATE)
@PostMapping("/cancel")
public R cancelFollow(@RequestParam Long vloggerId) {
LoginUser loginUser= LoginHelper.getLoginUser();

View File

@ -75,7 +75,7 @@ public interface Constants {
/**
* 订单未支付自动取消时间分钟
*/
Long ORDER_CANCEL_TIME = 15L;
Long ORDER_CANCEL_TIME = 30L;
/**
* 订单支付未核销自动退款时间

View File

@ -1,10 +1,13 @@
package com.wzj.soopin.goods.domain.entity;
import ch.qos.logback.core.joran.spi.NoAutoStart;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;
@ -23,6 +26,9 @@ import java.math.BigDecimal;
@Schema(description = "商品信息对象")
@Data
@TableName("pms_product")
@Builder
@AllArgsConstructor
@NoAutoStart
public class Product extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -9,6 +9,7 @@ import com.wzj.soopin.goods.domain.vo.ProductVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
import java.util.Map;
@ -46,4 +47,8 @@ public interface ProductMapper extends BaseMapper<Product> {
IPage<ProductVO> getProduct(@Param("page") Page<Product> page, @Param("query") ProductBo query);
@Update("UPDATE pms_product SET sales = sales + #{quantity} WHERE id = #{productId}")
void updateSales(@Param("productId") Long productId, @Param("quantity") Integer quantity);
}

View File

@ -19,4 +19,6 @@ public interface OrderItemService extends IService<OrderItem> {
MerchantOrderVO getMerchantOrder(Long orderItemId);
MerchantOrderVO getMerchantOrder(String code);
void addSaleNum(Long orderId);
}

View File

@ -3,6 +3,7 @@ package com.wzj.soopin.order.service.impl;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wzj.soopin.goods.mapper.ProductMapper;
import com.wzj.soopin.order.domain.entity.OrderItem;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import com.wzj.soopin.order.mapper.OrderItemMapper;
@ -23,7 +24,6 @@ import java.util.concurrent.TimeUnit;
/**
* 订单中所包含的商品Service业务层处理
*
*
* @author zcc
*/
@Slf4j
@ -32,6 +32,9 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
@Autowired
private RedisCache redisCache;
@Autowired
private ProductMapper productMapper;
@Override
public List<OrderItem> findByOrderId(Long orderId) {
@ -78,6 +81,12 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
public MerchantOrderVO getMerchantOrder(String code) {
String tenantId = TenantHelper.getTenantId();
Assert.notEmpty(tenantId, () -> ServiceException.of("您无权查看商户订单"));
return baseMapper.selectMerchatOrder(tenantId,null, code);
return baseMapper.selectMerchatOrder(tenantId, null, code);
}
@Override
public void addSaleNum(Long orderId) {
List<OrderItem> orderItems = findByOrderId(orderId);
orderItems.forEach(orderItem -> productMapper.updateSales(orderItem.getProductId(), orderItem.getQuantity()));
}
}

View File

@ -98,6 +98,8 @@ public class OrderCashier implements CashierExecute {
log.info("订单{}支付成功,金额{},方式{}", payParam.getSn(),
paymentSuccessParams.getPaymentMethod(),
paymentSuccessParams.getReceivableNo());
// 订单内商品已售数量增加
orderItemService.addSaleNum(Long.valueOf(payParam.getSn()));
}
}