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