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.ChargeBO;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO; import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.transaction.domain.entity.InitiateBatchTransferResponseNew; 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.domain.po.Withdraw;
import com.wzj.soopin.transaction.enums.WithdrawType; import com.wzj.soopin.transaction.enums.WithdrawType;
import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.IAccountBillService;
import com.wzj.soopin.transaction.service.IChargeService; import com.wzj.soopin.transaction.service.IChargeService;
import com.wzj.soopin.transaction.service.IWithdrawService; import com.wzj.soopin.transaction.service.IWithdrawService;
import com.wzj.soopin.transaction.service.impl.WxAuthService; 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.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; 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.satoken.utils.LoginHelper;
import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.config.properties.SocialProperties;
import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.social.utils.SocialUtils;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@RestController @RestController
@RequestMapping("/app/member") @RequestMapping("/app/member")
@Tag(name = "会员管理") @Tag(name = "会员管理")
@ -244,8 +239,8 @@ public class AppMemberController {
@Operation(summary = "用户注销") @Operation(summary = "关注用户")
@Log(title = "用户注销 ", businessType = BusinessType.UPDATE) @Log(title = "关注用户 ", businessType = BusinessType.UPDATE)
@PostMapping("/follow") @PostMapping("/follow")
public R follow(@RequestParam Long vloggerId) { public R follow(@RequestParam Long vloggerId) {
LoginUser loginUser= LoginHelper.getLoginUser(); LoginUser loginUser= LoginHelper.getLoginUser();
@ -255,8 +250,8 @@ public class AppMemberController {
fansService.doFollow(loginUser.getUserId(), vloggerId); fansService.doFollow(loginUser.getUserId(), vloggerId);
return R.ok(); return R.ok();
} }
@Operation(summary = "用户注销") @Operation(summary = "取消关注")
@Log(title = "用户注销 ", businessType = BusinessType.UPDATE) @Log(title = "取消关注 ", businessType = BusinessType.UPDATE)
@PostMapping("/cancel") @PostMapping("/cancel")
public R cancelFollow(@RequestParam Long vloggerId) { public R cancelFollow(@RequestParam Long vloggerId) {
LoginUser loginUser= LoginHelper.getLoginUser(); 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; 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.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.JdbcType;
@ -23,6 +26,9 @@ import java.math.BigDecimal;
@Schema(description = "商品信息对象") @Schema(description = "商品信息对象")
@Data @Data
@TableName("pms_product") @TableName("pms_product")
@Builder
@AllArgsConstructor
@NoAutoStart
public class Product extends BaseEntity { public class Product extends BaseEntity {
@Serial @Serial
private static final long serialVersionUID = 1L; 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.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List; import java.util.List;
import java.util.Map; 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); 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(Long orderItemId);
MerchantOrderVO getMerchantOrder(String code); 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 cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper; 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.entity.OrderItem;
import com.wzj.soopin.order.domain.vo.MerchantOrderVO; import com.wzj.soopin.order.domain.vo.MerchantOrderVO;
import com.wzj.soopin.order.mapper.OrderItemMapper; import com.wzj.soopin.order.mapper.OrderItemMapper;
@ -23,7 +24,6 @@ import java.util.concurrent.TimeUnit;
/** /**
* 订单中所包含的商品Service业务层处理 * 订单中所包含的商品Service业务层处理
* *
*
* @author zcc * @author zcc
*/ */
@Slf4j @Slf4j
@ -32,6 +32,9 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired
private ProductMapper productMapper;
@Override @Override
public List<OrderItem> findByOrderId(Long orderId) { public List<OrderItem> findByOrderId(Long orderId) {
@ -80,4 +83,10 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
Assert.notEmpty(tenantId, () -> ServiceException.of("您无权查看商户订单")); 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(), log.info("订单{}支付成功,金额{},方式{}", payParam.getSn(),
paymentSuccessParams.getPaymentMethod(), paymentSuccessParams.getPaymentMethod(),
paymentSuccessParams.getReceivableNo()); paymentSuccessParams.getReceivableNo());
// 订单内商品已售数量增加
orderItemService.addSaleNum(Long.valueOf(payParam.getSn()));
} }
} }