From 9bcc40d213a44498c46dae5e678e592b918b40b0 Mon Sep 17 00:00:00 2001
From: rentaiming <806181062@qq.com>
Date: 星期四, 30 五月 2024 18:33:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java |    6 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java                        |   25 +-
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java                |   38 +++-
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBrowseRecord.java                          |   68 +++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsBrowseRecord.java                                |   65 +++++++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsBrowseRecordMapper.java                          |   16 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java                |    3 
 ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionBrowseRecordMapper.xml                          |    5 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java            |   34 +++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java                     |   28 --
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java                        |   65 ++++--
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsBrowseRecordController.java            |   19 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/GoodsStockUpdDTO.java                       |   23 ++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java                                |   12 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java                       |   16 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java               |   20 ++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionBrowseRecordMapper.java                    |   16 +
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBrowseRecordServiceImpl.java         |   20 ++
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsBrowseRecordMapper.xml                                |    5 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/AuctionBrowseRecordController.java   |   19 ++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBrowseRecordService.java                 |   16 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java                           |   18 +-
 22 files changed, 458 insertions(+), 79 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/GoodsStockUpdDTO.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/GoodsStockUpdDTO.java
new file mode 100644
index 0000000..44d03d7
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/GoodsStockUpdDTO.java
@@ -0,0 +1,23 @@
+package com.ruoyi.system.api.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * @author mitao
+ * @date 2024/5/30
+ */
+@Data
+@ApiModel(value = "商品库存修改数据传输对象", description = "商品库存修改数据传输对象")
+public class GoodsStockUpdDTO implements Serializable {
+
+    private static final long serialVersionUID = 4679049589585565620L;
+
+    @ApiModelProperty(value = "商品skuId")
+    private Long goodsSkuId;
+
+    @ApiModelProperty(value = "库存")
+    private Integer auctionStock;
+}
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
index c90a52d..4eb1fea 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
@@ -1,7 +1,13 @@
 package com.ruoyi.system.api.factory;
 
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.system.api.domain.*;
+import com.ruoyi.system.api.domain.GoodsBrand;
+import com.ruoyi.system.api.domain.GoodsCategory;
+import com.ruoyi.system.api.domain.GoodsFlavorType;
+import com.ruoyi.system.api.domain.GoodsSeckill;
+import com.ruoyi.system.api.domain.GoodsSeries;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import java.util.List;
 import org.slf4j.Logger;
@@ -79,15 +85,9 @@
             }
 
             @Override
-            public R<?> deductStock(Long goodsSkuId, Integer auctionStock, String source) {
-                return R.fail("扣减商品库存失败:" + cause.getMessage());
+            public R<?> updGoodsStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS, String source) {
+                return R.fail("更新商品库存失败:" + cause.getMessage());
             }
-
-            @Override
-            public R<?> returningStock(Long goodsSkuId, Integer auctionStock, String source) {
-                return R.fail("回退商品库存失败:" + cause.getMessage());
-            }
-
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
index 145a26a..1350f9f 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
@@ -3,7 +3,13 @@
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.system.api.domain.*;
+import com.ruoyi.system.api.domain.GoodsBrand;
+import com.ruoyi.system.api.domain.GoodsCategory;
+import com.ruoyi.system.api.domain.GoodsFlavorType;
+import com.ruoyi.system.api.domain.GoodsSeckill;
+import com.ruoyi.system.api.domain.GoodsSeries;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.factory.GoodsSkuFactory;
 import java.util.List;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -13,7 +19,6 @@
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestParam;
 
 ;
 
@@ -66,13 +71,13 @@
     R<List<GoodsSku>> getGoodsByName(@PathVariable("goodsSkuName") String goodsSkuName,
             @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
-    @PutMapping("/goods-sku/deduct-stock")
-    R<?> deductStock(@RequestParam("goodsSkuId") Long goodsSkuId,
-            @RequestParam("auctionStock") Integer auctionStock,
-            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
-
-    @PutMapping("/goods-sku/returning-stock")
-    R<?> returningStock(@RequestParam("goodsSkuId") Long goodsSkuId,
-            @RequestParam("auctionStock") Integer auctionStock,
+    /**
+     * 批量更新商品库存 auctionStock 负数则为减库存,正数为加库存
+     *
+     * @param goodsStockUpdDTOS 商品库存修改数据传输对象
+     * @param source            请求来源
+     */
+    @PutMapping("/goods-sku/upd-stock")
+    R<?> updGoodsStock(@RequestBody List<GoodsStockUpdDTO> goodsStockUpdDTOS,
             @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/AuctionBrowseRecordController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/AuctionBrowseRecordController.java
new file mode 100644
index 0000000..b7e9966
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/AuctionBrowseRecordController.java
@@ -0,0 +1,19 @@
+package com.ruoyi.auction.controller.forepart;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@RestController
+@RequestMapping("/auction-browse-record")
+public class AuctionBrowseRecordController {
+
+}
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
index 1036bc4..01f611f 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionSalesroomController.java
@@ -66,6 +66,11 @@
         }
     }
 
+    /**
+     * 添加/编辑 拍卖场
+     *
+     * @param dto 拍卖场数据传输对象
+     */
     @PostMapping("/save")
     @ApiOperation(value = "添加/编辑 拍卖场", notes = "添加/编辑 拍卖场")
     public R<?> saveAuctionSalesroom(
@@ -73,4 +78,5 @@
         auctionSalesroomService.saveAuctionSalesroom(dto);
         return R.ok();
     }
+
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBrowseRecord.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBrowseRecord.java
new file mode 100644
index 0000000..9390b57
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBrowseRecord.java
@@ -0,0 +1,68 @@
+package com.ruoyi.auction.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 会员商品浏览记录表
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_auction_browse_record")
+@ApiModel(value = "AuctionBrowseRecord对象", description = "会员商品浏览记录表")
+public class AuctionBrowseRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "会员商品浏览记录id")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "浏览类型 1=普通拍品 2=拍卖会")
+    private AuctionOrderTypeEnum browseType;
+
+    @ApiModelProperty(value = "浏览目标id")
+    private Long targetId;
+
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField(value = "create_by", fill = FieldFill.INSERT)
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
+    @TableLogic
+    private Integer delFlag;
+
+}
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionBrowseRecordMapper.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionBrowseRecordMapper.java
new file mode 100644
index 0000000..cb6ba80
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionBrowseRecordMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.auction.mapper;
+
+import com.ruoyi.auction.domain.AuctionBrowseRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+public interface AuctionBrowseRecordMapper extends BaseMapper<AuctionBrowseRecord> {
+
+}
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBrowseRecordService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBrowseRecordService.java
new file mode 100644
index 0000000..6733d4c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBrowseRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.auction.service;
+
+import com.ruoyi.auction.domain.AuctionBrowseRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+public interface IAuctionBrowseRecordService extends IService<AuctionBrowseRecord> {
+
+}
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBrowseRecordServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBrowseRecordServiceImpl.java
new file mode 100644
index 0000000..f93ca98
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBrowseRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.auction.service.impl;
+
+import com.ruoyi.auction.domain.AuctionBrowseRecord;
+import com.ruoyi.auction.mapper.AuctionBrowseRecordMapper;
+import com.ruoyi.auction.service.IAuctionBrowseRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@Service
+public class AuctionBrowseRecordServiceImpl extends ServiceImpl<AuctionBrowseRecordMapper, AuctionBrowseRecord> implements IAuctionBrowseRecordService {
+
+}
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
index 1e05cbd..2352ce6 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomVO;
+import com.google.common.collect.Lists;
 import com.ruoyi.auction.controller.management.dto.AuctionGoodsDTO;
 import com.ruoyi.auction.controller.management.dto.AuctionGoodsQuery;
 import com.ruoyi.auction.controller.management.vo.AuctionBidRecordVO;
@@ -28,6 +29,15 @@
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.dto.*;
+import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO;
+import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.Member;
+import com.ruoyi.system.api.domain.MemberAddress;
+import com.ruoyi.system.api.domain.OrderAuctionBond;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
+import com.ruoyi.system.api.domain.dto.OrderDTO;
+import com.ruoyi.system.api.domain.dto.RefundDTO;
 import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
 import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
@@ -108,8 +118,8 @@
     }
 
     @Override
-    @GlobalTransactional(rollbackFor = Exception.class)
     @Transactional
+    @GlobalTransactional(rollbackFor = Exception.class)
     public void saveAuctionGoods(AuctionGoodsDTO dto) {
         Long id = dto.getId();
         Long goodsSkuId = dto.getGoodsSkuId();
@@ -129,7 +139,11 @@
             }
             this.save(auctionGoods);
             // 扣减商品库存
-            goodsSkuClient.deductStock(goodsSkuId, dto.getAuctionStock(), SecurityConstants.INNER);
+            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+            goodsStockUpdDTO.setGoodsSkuId(goodsSkuId);
+            goodsStockUpdDTO.setAuctionStock(dto.getAuctionStock() * -1);
+            goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
+                    SecurityConstants.INNER);
         } else {
             // 编辑
             AuctionGoods auctionGoodsOrg = this.getById(id);
@@ -150,9 +164,6 @@
             if (goodsSku.getStock() + auctionGoodsOrg.getAuctionStock() < dto.getAuctionStock()) {
                 throw new ServiceException("商品库存不足");
             }
-            // 编辑商品时需要先回退商品库存,再扣减最新的商品库存
-            goodsSkuClient.returningStock(auctionGoodsOrg.getGoodsSkuId(),
-                    auctionGoodsOrg.getAuctionStock(), SecurityConstants.INNER);
             auctionGoodsOrg.setStartingPrice(dto.getStartingPrice());
             auctionGoodsOrg.setMinimumMarkupAmount(dto.getMinimumMarkupAmount());
             auctionGoodsOrg.setStartTime(dto.getStartTime());
@@ -164,9 +175,13 @@
             auctionGoodsOrg.setShareTitle(dto.getShareTitle());
             auctionGoodsOrg.setSharePic(dto.getSharePic());
             this.updateById(auctionGoodsOrg);
-            // 扣减库存
-            goodsSkuClient.deductStock(auctionGoodsOrg.getGoodsSkuId(),
-                    auctionGoodsOrg.getAuctionStock(), SecurityConstants.INNER);
+            // 更新商品库存
+            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+            goodsStockUpdDTO.setGoodsSkuId(goodsSkuId);
+            goodsStockUpdDTO.setAuctionStock(
+                    auctionGoodsOrg.getAuctionStock() - dto.getAuctionStock());
+            goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
+                    SecurityConstants.INNER);
         }
     }
 
@@ -253,8 +268,11 @@
                 orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
             } else {
                 // 没有人出价,退回拍卖商品库存
-                goodsSkuClient.returningStock(auctionGoods.getGoodsSkuId(),
-                        auctionGoods.getAuctionStock(), SecurityConstants.INNER);
+                GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+                goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
+                goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock());
+                goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
+                        SecurityConstants.INNER);
             }
             // 结束拍卖
             this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
index 78312f7..8413461 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -55,6 +55,12 @@
 import com.ruoyi.system.api.domain.Member;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
+import com.ruoyi.system.api.domain.dto.BidDTO;
+import com.ruoyi.system.api.domain.dto.BidVO;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
+import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
+import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
 import com.ruoyi.system.api.domain.dto.*;
 import com.ruoyi.system.api.domain.vo.PayInfoVO;
 import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO;
@@ -62,6 +68,7 @@
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
+import io.seata.spring.annotation.GlobalTransactional;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -70,6 +77,7 @@
 import org.apache.http.HttpResponse;
 import org.apache.http.util.EntityUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
 
@@ -582,6 +590,8 @@
     }
 
     @Override
+    @Transactional
+    @GlobalTransactional(rollbackFor = Exception.class)
     public void saveAuctionSalesroom(MgtAuctionSalesroomDTO dto) {
         Long id = dto.getId();
         AuctionSalesroom auctionSalesroom = BeanUtils.copyBean(dto, AuctionSalesroom.class);
@@ -612,6 +622,13 @@
             auctionSalesroom.setAuctionSalesroomNo(nextId.toString());
             // 添加
             this.save(auctionSalesroom);
+            List<GoodsStockUpdDTO> goodsStockUpdDTOS = auctionSalesroomGoods.stream().map(item -> {
+                GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+                goodsStockUpdDTO.setGoodsSkuId(item.getGoodsSkuId());
+                goodsStockUpdDTO.setAuctionStock(item.getSalesroomStock() * -1);
+                return goodsStockUpdDTO;
+            }).collect(Collectors.toList());
+            goodsSkuClient.updGoodsStock(goodsStockUpdDTOS, SecurityConstants.INNER);
         } else {
             // 编辑
             AuctionSalesroom auctionSalesroomOrg = this.getById(id);
@@ -626,6 +643,23 @@
             }
             auctionSalesroom.setId(auctionSalesroomOrg.getId());
             this.updateById(auctionSalesroom);
+            List<AuctionSalesroomGoods> list = auctionSalesroomGoodsService.list(
+                    Wrappers.<AuctionSalesroomGoods>lambdaQuery()
+                            .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id));
+            // 封装库存修改实体
+            List<GoodsStockUpdDTO> goodsStockUpdDTOS = list.stream()
+                    .flatMap(salesroomGoods -> auctionSalesroomGoods.stream()
+                            .filter(auctionSalesroomGood -> salesroomGoods.getId()
+                                    .equals(auctionSalesroomGood.getId()))
+                            .map(auctionSalesroomGood -> {
+                                GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+                                goodsStockUpdDTO.setGoodsSkuId(salesroomGoods.getGoodsSkuId());
+                                goodsStockUpdDTO.setAuctionStock(salesroomGoods.getSalesroomStock()
+                                        - auctionSalesroomGood.getSalesroomStock());
+                                return goodsStockUpdDTO;
+                            }))
+                    .collect(Collectors.toList());
+            goodsSkuClient.updGoodsStock(goodsStockUpdDTOS, SecurityConstants.INNER);
             // 移除原来地拍卖商品
             auctionSalesroomGoodsService.remove(Wrappers.<AuctionSalesroomGoods>lambdaQuery()
                     .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id));
diff --git a/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionBrowseRecordMapper.xml b/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionBrowseRecordMapper.xml
new file mode 100644
index 0000000..b1b7e98
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionBrowseRecordMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.auction.mapper.AuctionBrowseRecordMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsBrowseRecordController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsBrowseRecordController.java
new file mode 100644
index 0000000..705f459
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsBrowseRecordController.java
@@ -0,0 +1,19 @@
+package com.ruoyi.goods.controller.inner;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@RestController
+@RequestMapping("/goods-browse-record")
+public class GoodsBrowseRecordController {
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
index 9a3a0f8..ccdcc09 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
@@ -5,6 +5,7 @@
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.goods.service.IGoodsSkuService;
 import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import java.util.List;
 import javax.annotation.Resource;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -13,7 +14,6 @@
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -65,31 +65,17 @@
         return R.ok(iGoodsSkuService.getGoodsByName(goodsSkuName));
     }
 
-    /**
-     * 扣减商品库存
-     *
-     * @param goodsSkuId   商品SKU ID
-     * @param auctionStock 拍卖商品库存
-     */
-    @InnerAuth
-    @PutMapping("/deduct-stock")
-    R<?> deductStock(@RequestParam("goodsSkuId") Long goodsSkuId,
-            @RequestParam("auctionStock") Integer auctionStock) {
-        iGoodsSkuService.deductStock(goodsSkuId, auctionStock);
-        return R.ok();
-    }
 
     /**
-     * 退回商品库存
+     * 批量更新商品库存 auctionStock 负数则为减库存,正数为加库存
      *
-     * @param goodsSkuId   商品SKU ID
-     * @param auctionStock 拍卖商品库存
+     * @param goodsStockUpdDTOS 商品库存修改数据传输对象
+     * @param source            请求来源
      */
     @InnerAuth
-    @PutMapping("/goods-sku/returning-stock")
-    R<?> returningStock(@RequestParam("goodsSkuId") Long goodsSkuId,
-            @RequestParam("auctionStock") Integer auctionStock) {
-        iGoodsSkuService.returningStock(goodsSkuId, auctionStock);
+    @PutMapping("/goods-sku/upd-stock")
+    R<?> returningStock(@RequestBody List<GoodsStockUpdDTO> goodsStockUpdDTOS) {
+        iGoodsSkuService.returningStock(goodsStockUpdDTOS);
         return R.ok();
     }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsBrowseRecord.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsBrowseRecord.java
new file mode 100644
index 0000000..138e69c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/GoodsBrowseRecord.java
@@ -0,0 +1,65 @@
+package com.ruoyi.goods.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 会员商品浏览记录表
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_goods_browse_record")
+@ApiModel(value = "GoodsBrowseRecord对象", description = "会员商品浏览记录表")
+public class GoodsBrowseRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "会员商品浏览记录id")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "商品id")
+    private Long goodsSkuId;
+
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField(value = "create_by", fill = FieldFill.INSERT)
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
+    @TableLogic
+    private Integer delFlag;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsBrowseRecordMapper.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsBrowseRecordMapper.java
new file mode 100644
index 0000000..94bb08d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsBrowseRecordMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.goods.mapper;
+
+import com.ruoyi.goods.domain.GoodsBrowseRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+public interface GoodsBrowseRecordMapper extends BaseMapper<GoodsBrowseRecord> {
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java
new file mode 100644
index 0000000..97743e7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsBrowseRecordService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.goods.service;
+
+import com.ruoyi.goods.domain.GoodsBrowseRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+public interface IGoodsBrowseRecordService extends IService<GoodsBrowseRecord> {
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
index 29af5f7..a8a41ff 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -7,6 +7,7 @@
 import com.ruoyi.goods.controller.management.dto.GoodsSkuQuery;
 import com.ruoyi.goods.controller.management.vo.GoodsSkuVO;
 import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import java.util.List;
 
@@ -51,14 +52,11 @@
      * @return List<GoodsSku>商品SKU列表
      */
     List<GoodsSku> getGoodsByName(String goodsSkuName);
-
+    
     /**
-     * 扣减商品库存
+     * 批量退回商品库存
      *
-     * @param goodsSkuId   商品SKU ID
-     * @param auctionStock 拍卖库存
+     * @param goodsStockUpdDTOS 退货库存数据传输对象
      */
-    void deductStock(Long goodsSkuId, Integer auctionStock);
-
-    void returningStock(Long goodsSkuId, Integer auctionStock);
+    void returningStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
new file mode 100644
index 0000000..0c44780
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.goods.service.impl;
+
+import com.ruoyi.goods.domain.GoodsBrowseRecord;
+import com.ruoyi.goods.mapper.GoodsBrowseRecordMapper;
+import com.ruoyi.goods.service.IGoodsBrowseRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 会员商品浏览记录表 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-30
+ */
+@Service
+public class GoodsBrowseRecordServiceImpl extends ServiceImpl<GoodsBrowseRecordMapper, GoodsBrowseRecord> implements IGoodsBrowseRecordService {
+
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
index 6965243..5427e04 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -24,11 +24,15 @@
 import com.ruoyi.goods.service.IGoodsSkuService;
 import com.ruoyi.system.api.domain.GoodsSeckill;
 import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -49,6 +53,8 @@
     private final IGoodsInfoTitleValueService goodsInfoTitleValueService;
     private final IGoodsSeckillService goodsSeckillService;
     private final IGoodsGroupPurchaseService goodsGroupPurchaseService;
+    private final RedissonClient redissonClient;
+
     private static final ObjectMapper objectMapper = new ObjectMapper();
 
     /**
@@ -203,37 +209,52 @@
                 .list();
     }
 
+
     /**
-     * 扣减商品库存
+     * 批量更新商品库存 auctionStock 负数则为减库存,正数为加库存
      *
-     * @param goodsSkuId   商品SKU ID
-     * @param auctionStock 拍卖库存
+     * @param goodsStockUpdDTOS 商品库存修改数据传输对象
      */
     @Override
-    public void deductStock(Long goodsSkuId, Integer auctionStock) {
-        GoodsSku goodsSku = this.getById(goodsSkuId);
-        if (StringUtils.isNull(goodsSku)) {
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
+    public void returningStock(List<GoodsStockUpdDTO> goodsStockUpdDTOS) {
+        List<Long> goodsSkuIdList = goodsStockUpdDTOS.stream()
+                .map(GoodsStockUpdDTO::getGoodsSkuId)
+                .collect(Collectors.toList());
+        List<GoodsSku> goodsSkus = this.listByIds(goodsSkuIdList);
+
+        if (StringUtils.isEmpty(goodsSkus)) {
             throw new ServiceException("商品不存在");
         }
-        if (goodsSku.getStock() < auctionStock) {
-            throw new ServiceException("库存不足");
+        Map<Long, Integer> stockMap = goodsStockUpdDTOS.stream()
+                .collect(Collectors.toMap(GoodsStockUpdDTO::getGoodsSkuId,
+                        GoodsStockUpdDTO::getAuctionStock));
+        for (GoodsSku skus : goodsSkus) {
+            Integer auctionStock = stockMap.get(skus.getId());
+            if (StringUtils.isNotNull(auctionStock) && auctionStock > 0) {
+                // 更新商品库存,更新五次失败抛出异常
+                boolean isUpdated = false;
+                for (int i = 0; i < 5; i++) {
+                    isUpdated = updateGoodsStock(skus, auctionStock);
+                    if (isUpdated) {
+                        break;
+                    } else {
+                        skus = this.getById(skus.getId());
+                    }
+                }
+                if (!isUpdated) {
+                    throw new ServiceException("商品库存回退失败");
+                }
+            }
         }
-        // 更新商品库存
-        this.lambdaUpdate().set(GoodsSku::getStock, goodsSku.getStock() - auctionStock)
-                .ge(GoodsSku::getStock, auctionStock).eq(GoodsSku::getId, goodsSku.getId())
-                .update();
+
     }
 
-    @Override
-    public void returningStock(Long goodsSkuId, Integer auctionStock) {
-        GoodsSku goodsSku = this.getById(goodsSkuId);
-        if (StringUtils.isNull(goodsSku)) {
-            throw new ServiceException("商品不存在");
-        }
-        // 更新商品库存
-        this.lambdaUpdate()
-                .set(auctionStock > 0, GoodsSku::getStock, goodsSku.getStock() + auctionStock)
-                .eq(GoodsSku::getId, goodsSku.getId())
+    private boolean updateGoodsStock(GoodsSku skus, Integer auctionStock) {
+        return this.lambdaUpdate()
+                .set(GoodsSku::getStock, skus.getStock() + auctionStock)
+                .eq(GoodsSku::getId, skus.getId())
+                .eq(GoodsSku::getStock, skus.getStock())
                 .update();
     }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsBrowseRecordMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsBrowseRecordMapper.xml
new file mode 100644
index 0000000..31a344e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsBrowseRecordMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.goods.mapper.GoodsBrowseRecordMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
index 64cb8e4..67b935f 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderAuctionBondServiceImpl.java
@@ -26,6 +26,8 @@
 import javax.annotation.Resource;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -109,6 +111,7 @@
      * @param bondStatusEnum 保证金状态
      */
     @Override
+    @Transactional(propagation = Propagation.REQUIRES_NEW)
     public void updateOrderAuctionBondStatus(List<Long> ids, BondStatusEnum bondStatusEnum) {
         this.lambdaUpdate().set(OrderAuctionBond::getBoundStatus, bondStatusEnum)
                 .in(OrderAuctionBond::getId, ids).update();

--
Gitblit v1.7.1