ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
@@ -10,6 +10,7 @@ import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PathVariable; @Component public class GoodsSkuFactory implements FallbackFactory<GoodsSkuClient> { @@ -18,44 +19,56 @@ public GoodsSkuClient create(Throwable cause) { return new GoodsSkuClient(){ @Override public R<GoodsSku> getGoodsSkuOne(@PathVariable("goodsSkuId") Long goodsSkuId) { public R<GoodsSku> getGoodsSkuOne(@PathVariable("goodsSkuId") Long goodsSkuId, String source) { return R.fail("通过id查询商品失败:" + cause.getMessage()); } @Override public R<GoodsSeckill> getGoodsSeckillOne(Long goodsSkuId) { public R<GoodsSeckill> getGoodsSeckillOne(Long goodsSkuId, String source) { return R.fail("通过id查询秒杀商品失败:" + cause.getMessage()); } @Override public R<Boolean> updateGoodsSkuOne(GoodsSku goodsSku) { public R<Boolean> updateGoodsSkuOne(GoodsSku goodsSku, String source) { return R.fail("更新商品失败:" + cause.getMessage()); } @Override public R<?> startSeckill(Long seckillId) { public R<?> startSeckill(Long seckillId, String source) { return R.fail("开始秒杀失败:" + cause.getMessage()); } @Override public R<?> endSeckill(Long seckillId) { public R<?> endSeckill(Long seckillId, String source) { return R.fail("结束秒杀失败:" + cause.getMessage()); } @Override public R<?> startGroupPurchase(Long groupPurchaseId) { public R<?> startGroupPurchase(Long groupPurchaseId, String source) { return R.fail("开始团购失败:" + cause.getMessage()); } @Override public R<?> endGroupPurchase(Long groupPurchaseId) { public R<?> endGroupPurchase(Long groupPurchaseId, String source) { return R.fail("结束团购失败:" + cause.getMessage()); } @Override public R<List<GoodsSku>> getGoodsByName(String goodsSkuName) { public R<List<GoodsSku>> getGoodsByName(String goodsSkuName, String source) { return R.fail("根据商品名称获取商品SKU列表失败:" + cause.getMessage()); } @Override public R<?> deductStock(Long goodsSkuId, Integer auctionStock, String source) { return R.fail("扣减商品库存失败:" + cause.getMessage()); } @Override public R<?> returningStock(Long goodsSkuId, Integer auctionStock, String source) { return R.fail("回退商品库存失败:" + cause.getMessage()); } }; } } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/MemberFallbackFactory.java
@@ -18,12 +18,12 @@ return new MemberClient(){ @Override public R<MemberAddress> getMemberAddressOne(Long userId) { public R<MemberAddress> getMemberAddressOne(Long userId, String source) { return R.fail("通过用户地址失败:" + cause.getMessage()); } @Override public R<Member> getMembeOne(Long userId) { public R<Member> getMembeOne(Long userId, String source) { return R.fail("获取用户失败:" + cause.getMessage()); } }; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -20,26 +20,27 @@ @Override public R<Boolean> saveOrderOne(OrderDTO orderDTO) { public R<Boolean> saveOrderOne(OrderDTO orderDTO, String source) { return R.fail("通过视频集合查询用户失败:" + cause.getMessage()); } @Override public R<Boolean> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO) { public R<Boolean> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO, String source) { return R.fail("通过视频集合查询用户失败:" + cause.getMessage()); } @Override public R<Integer> getSeckillMembers(Long id) { public R<Integer> getSeckillMembers(Long id, String source) { return R.fail("获取秒杀商品已购会员数失败:" + cause.getMessage()); } @Override public R<Integer> getGroupPurchasesGoodsNum(Long id) { public R<Integer> getGroupPurchasesGoodsNum(Long id, String source) { return R.fail("获取团购商品已购数量失败:" + cause.getMessage()); } @Override public R<List<Order>> getOrderByGroupPurchaseId(Long id) { public R<List<Order>> getOrderByGroupPurchaseId(Long id, String source) { return R.fail("根据团购商品id获取订单列表失败:" + cause.getMessage()); } }; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/PromotionFallbackFactory.java
@@ -16,11 +16,11 @@ public PromotionClient create(Throwable cause) { return new PromotionClient(){ @Override public R<List<PromotionVideo>> getPromotionVideoList() { public R<List<PromotionVideo>> getPromotionVideoList(String source) { return R.fail("通过视频集合查询用户失败:" + cause.getMessage()); } @Override public R<PromotionVideo> getPromotionVideoOne(Long promotionVideoId) { public R<PromotionVideo> getPromotionVideoOne(Long promotionVideoId, String source) { return R.fail("获取视频信息失败:" + cause.getMessage()); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/SysUserFallbackFactory.java
@@ -64,17 +64,17 @@ } @Override public R<DelayTask> getDelayTask(String key) { public R<DelayTask> getDelayTask(String key, String source) { return R.fail("获取延时任务失败:" + cause.getMessage()); } @Override public R<?> addDelayTask(DelayTask delayTask) { public R<?> addDelayTask(DelayTask delayTask, String source) { return R.fail("添加延时任务失败:" + cause.getMessage()); } @Override public R<?> deleteDelayTask(String key) { public R<?> deleteDelayTask(String key, String source) { return R.fail("删除延时任务失败:" + cause.getMessage()); } }; ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.api.feignClient; 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.GoodsSeckill; @@ -10,7 +11,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; 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; ; @@ -19,27 +23,44 @@ @PostMapping("/goods-sku/getGoodsSkuOne") R<GoodsSku> getGoodsSkuOne(@RequestBody Long goodsSkuId); R<GoodsSku> getGoodsSkuOne(@RequestBody Long goodsSkuId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/goods-seckill/getGoodsSeckillOne") R<GoodsSeckill> getGoodsSeckillOne(@RequestBody Long goodsSkuId); R<GoodsSeckill> getGoodsSeckillOne(@RequestBody Long goodsSkuId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/goods-sku/updateGoodsSkuOne") R<Boolean> updateGoodsSkuOne(@RequestBody GoodsSku goodsSku); R<Boolean> updateGoodsSkuOne(@RequestBody GoodsSku goodsSku, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @GetMapping("/goods-seckill/start/{seckillId}") R<?> startSeckill(@PathVariable("seckillId") Long seckillId); R<?> startSeckill(@PathVariable("seckillId") Long seckillId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @GetMapping("/goods-seckill/end/{seckillId}") R<?> endSeckill(@PathVariable("seckillId") Long seckillId); R<?> endSeckill(@PathVariable("seckillId") Long seckillId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @GetMapping("/goods-group-purchase/start/{groupPurchaseId}") R<?> startGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId); R<?> startGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @GetMapping("/goods-group-purchase/end/{groupPurchaseId}") R<?> endGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId); R<?> endGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @GetMapping("/goods-sku/name/{goodsSkuName}") R<List<GoodsSku>> getGoodsByName(@PathVariable("goodsSkuName") String goodsSkuName); 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, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/MemberClient.java
@@ -1,21 +1,31 @@ package com.ruoyi.system.api.feignClient; 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.Member; import com.ruoyi.system.api.domain.MemberAddress; import com.ruoyi.system.api.factory.MemberFallbackFactory; import java.util.List; import java.util.Set; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(contextId = "memberClient", value = ServiceNameConstants.RUOYI_MEMBER, fallbackFactory = MemberFallbackFactory.class) public interface MemberClient { @PostMapping("/member-address/getMemberAddressOne") R<MemberAddress> getMemberAddressOne(@RequestBody Long userId); R<MemberAddress> getMemberAddressOne(@RequestBody Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/member/getMembeOne") R<Member> getMembeOne(@RequestBody Long userId); R<Member> getMembeOne(@RequestBody Long userId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/member/list-by-ids") R<List<Member>> getMemberListByIds(@RequestParam("memberIdList") Set<Long> memberIdList, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/OrderClient.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.api.feignClient; 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.Order; @@ -12,16 +13,19 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; @FeignClient(contextId = "orderClient", value = ServiceNameConstants.RUOYI_ORDER, fallbackFactory = OrderFallbackFactory.class) public interface OrderClient { @PostMapping("/order/saveOrderOne") R<Boolean> saveOrderOne(@RequestBody OrderDTO orderDTO); R<Boolean> saveOrderOne(@RequestBody OrderDTO orderDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/order-auction-bond/getOrderAuctionBond") R<Boolean> getOrderAuctionBond(@RequestBody OrderAuctionBondDTO orderAuctionBondDTO); R<Boolean> getOrderAuctionBond(@RequestBody OrderAuctionBondDTO orderAuctionBondDTO, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 获取某个商品的已购会员数 @@ -30,7 +34,8 @@ * @return 已购会员数 */ @GetMapping("/order/seckill-members/{id}") R<Integer> getSeckillMembers(@PathVariable("id") Long id); R<Integer> getSeckillMembers(@PathVariable("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 获取团购商品已购数量 @@ -39,7 +44,8 @@ * @return 团购商品已购数量 */ @GetMapping("/order/group-purchase-num/{id}") R<Integer> getGroupPurchasesGoodsNum(@PathVariable("id") Long id); R<Integer> getGroupPurchasesGoodsNum(@PathVariable("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); /** * 根据团购商品id获取订单列表 @@ -48,5 +54,6 @@ * @return List<Order> 订单列表 */ @GetMapping("/order/group-purchase-id/{id}") R<List<Order>> getOrderByGroupPurchaseId(@PathVariable("id") Long id); R<List<Order>> getOrderByGroupPurchaseId(@PathVariable("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/PromotionClient.java
@@ -1,22 +1,25 @@ package com.ruoyi.system.api.feignClient; 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.PromotionVideo; import com.ruoyi.system.api.factory.PromotionFallbackFactory; import java.util.List; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import java.util.List; import org.springframework.web.bind.annotation.RequestHeader; @FeignClient(contextId = "promotionClient", value = ServiceNameConstants.RUOYI_PROMOTION, fallbackFactory = PromotionFallbackFactory.class) public interface PromotionClient { @PostMapping("/promotion-video/getPromotionVideoList") R<List<PromotionVideo>> getPromotionVideoList(); R<List<PromotionVideo>> getPromotionVideoList( @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/promotion-video/getPromotionVideoOne") R<PromotionVideo> getPromotionVideoOne(Long promotionVideoId); R<PromotionVideo> getPromotionVideoOne(Long promotionVideoId, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -1,5 +1,6 @@ package com.ruoyi.system.api.feignClient; 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.DelayTask; @@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; @FeignClient(contextId = "sysUserClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysUserFallbackFactory.class) public interface SysUserClient { @@ -75,12 +77,15 @@ /** * 延时任务控制 */ @PostMapping("/config/getDelayTask") public R<DelayTask> getDelayTask(@RequestBody String key); @PostMapping("/delay-task/getDelayTask") public R<DelayTask> getDelayTask(@RequestBody String key, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/config/addDelayTask") public R<?> addDelayTask(@RequestBody DelayTask delayTask); @PostMapping("/delay-task/addDelayTask") public R<?> addDelayTask(@RequestBody DelayTask delayTask, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); @PostMapping("/config/deleteDelayTask") public R<?> deleteDelayTask(@RequestBody String key); @PostMapping("/delay-task/deleteDelayTask") public R<?> deleteDelayTask(@RequestBody String key, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); } ruoyi-modules/ruoyi-article/src/main/java/com/ruoyi/article/service/impl/ArticleServiceImpl.java
@@ -14,7 +14,9 @@ import com.ruoyi.article.service.IArticleService; import com.ruoyi.article.service.IMemberArticleCollectionService; import com.ruoyi.article.service.IMemberLikeService; import com.ruoyi.article.service.IMemberLikeService; import com.ruoyi.article.vo.ArticleCommentsVO; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.article.vo.ArticleVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.ArticleTypeEnum; @@ -22,18 +24,15 @@ import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; import com.ruoyi.system.api.feignClient.MemberClient; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import util.HuaWeiOBSUtil; import javax.annotation.Resource; import org.springframework.stereotype.Service; import java.io.IOException; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import util.HuaWeiOBSUtil; /** * <p> @@ -263,7 +262,8 @@ @Override public void getReport(ArticleDTO articleDTO) { Article article= articleService.getById(articleDTO.getId()); R<Member> membeOne = memberClient.getMembeOne(articleDTO.getMemberId()); R<Member> membeOne = memberClient.getMembeOne(articleDTO.getMemberId(), SecurityConstants.INNER); Member data = membeOne.getData(); article.setReportBy(data.getNickname()); article.setReportedTime(LocalDateTime.now()); ruoyi-modules/ruoyi-auction/pom.xml
@@ -112,7 +112,11 @@ </exclusion> </exclusions> </dependency> <!-- 分布式事务 --> <dependency> <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-seata</artifactId> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/MemberBondController.java
New file @@ -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-27 */ @RestController @RequestMapping("/member-bond") public class MemberBondController { } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MemberBondController.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.auction.controller.management; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 前端控制器 * </p> * * @author mitao * @since 2024-05-27 */ @RestController @RequestMapping("/mgt/member-bond") public class MemberBondController { } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionGoodsController.java
@@ -11,7 +11,10 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; 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.RestController; @@ -45,10 +48,34 @@ return R.ok(auctionGoodsService.getAuctionGoodsPage(query)); } /** * 查看详情 * * @param id 拍卖商品id * @return AuctionGoodsVO */ @ApiOperation(value = "查看详情", notes = "查看详情") @GetMapping("/{id}") public R<AuctionGoodsVO> getAuctionGoods(@PathVariable("id") Long id) { return R.ok(auctionGoodsService.getAuctionGoodsById(id)); } /** * 添加/编辑 拍卖商品 * * @param dto 拍卖商品数据传输对象 */ @ApiOperation(value = "添加/编辑 拍卖商品", notes = "添加/编辑 拍卖商品") @PostMapping("/save") public R<?> saveAuctionGoods(@Validated @RequestBody AuctionGoodsDTO dto) { auctionGoodsService.saveAuctionGoods(dto); return R.ok(); } @ApiOperation("立即结束") @PutMapping("/stop/{id}") public R<?> stopAuctionGoods(@PathVariable("id") Long id) { auctionGoodsService.stopAuctionGoods(id); return R.ok(); } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/AuctionBidRecordVO.java
New file @@ -0,0 +1,38 @@ package com.ruoyi.auction.controller.management.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import lombok.Data; /** * @author mitao * @date 2024/5/27 */ @Data @ApiModel("拍卖商品出价视图对象") public class AuctionBidRecordVO implements Serializable { private static final long serialVersionUID = 8479130955196893180L; @ApiModelProperty(value = "出价记录id") private Long id; @ApiModelProperty(value = "会员id") private Long memberId; @ApiModelProperty(value = "会员名称") private String memberName; @ApiModelProperty(value = "商品名称") private String goodsSkuName; @ApiModelProperty(value = "最终出价时间") private LocalDateTime lastBidTime; @ApiModelProperty(value = "最终出价金额") private BigDecimal lastBidAmount; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/vo/AuctionGoodsVO.java
@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; import lombok.Data; /** @@ -58,4 +59,6 @@ @ApiModelProperty(value = "开始状态 0=预展中 1=拍卖中 2=已结束") private AuctionStartStatusEnum startStatus; @ApiModelProperty(value = "出价记录") private List<AuctionBidRecordVO> recordList; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java
New file @@ -0,0 +1,70 @@ package com.ruoyi.auction.domain; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * <p> * * </p> * * @author mitao * @since 2024-05-27 */ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_member_bond") @ApiModel(value="MemberBond对象", description="") public class MemberBond implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "主键id") @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty(value = "会员id") private Long memberId; @ApiModelProperty(value = "拍卖商品id") private Long auctionGoodsId; @ApiModelProperty(value = "拍卖会id") private Long auctionRoomId; @ApiModelProperty(value = "保证金") private BigDecimal bond; @ApiModelProperty(value = "保证金类型1=普通拍品 2=拍卖会") private Integer bondType; @ApiModelProperty(value = "是否退保证金 0=是 1=否") private Integer returned; @ApiModelProperty(value = "创建者") private String createBy; @ApiModelProperty(value = "创建时间") private LocalDateTime createTime; @ApiModelProperty(value = "更新者") private String updateBy; @ApiModelProperty(value = "更新时间") private LocalDateTime updateTime; @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)") private Integer delFlag; } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/MemberBondMapper.java
New file @@ -0,0 +1,16 @@ package com.ruoyi.auction.mapper; import com.ruoyi.auction.domain.MemberBond; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** * <p> * Mapper 接口 * </p> * * @author mitao * @since 2024-05-27 */ public interface MemberBondMapper extends BaseMapper<MemberBond> { } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java
@@ -24,5 +24,20 @@ */ PageDTO<AuctionGoodsVO> getAuctionGoodsPage(AuctionGoodsQuery query); /** * 添加/编辑 拍卖商品 * * @param dto 拍卖商品数据传输对象 */ void saveAuctionGoods(AuctionGoodsDTO dto); /** * 查看拍卖商品详情 * * @param id 拍卖商品id * @return AuctionGoodsVO */ AuctionGoodsVO getAuctionGoodsById(Long id); void stopAuctionGoods(Long id); } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IMemberBondService.java
New file @@ -0,0 +1,16 @@ package com.ruoyi.auction.service; import com.ruoyi.auction.domain.MemberBond; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * 服务类 * </p> * * @author mitao * @since 2024-05-27 */ public interface IMemberBondService extends IService<MemberBond> { } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -4,24 +4,32 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.auction.controller.management.dto.AuctionGoodsDTO; import com.ruoyi.auction.controller.management.dto.AuctionGoodsQuery; import com.ruoyi.auction.controller.management.vo.AuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.AuctionGoodsVO; import com.ruoyi.auction.domain.AuctionBidRecord; import com.ruoyi.auction.domain.AuctionGoods; import com.ruoyi.auction.mapper.AuctionGoodsMapper; import com.ruoyi.auction.service.IAuctionBidRecordService; import com.ruoyi.auction.service.IAuctionGoodsService; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.feignClient.GoodsSkuClient; import com.ruoyi.system.api.feignClient.MemberClient; import io.seata.spring.annotation.GlobalTransactional; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -36,9 +44,9 @@ @RequiredArgsConstructor public class AuctionGoodsServiceImpl extends ServiceImpl<AuctionGoodsMapper, AuctionGoods> implements IAuctionGoodsService { @Resource private GoodsSkuClient goodsSkuClient; private final GoodsSkuClient goodsSkuClient; private final IAuctionBidRecordService auctionBidRecordService; private final MemberClient memberClient; /** * 获取拍卖商品列表的分页数据 * @@ -49,7 +57,8 @@ public PageDTO<AuctionGoodsVO> getAuctionGoodsPage(AuctionGoodsQuery query) { Set<Long> goodsSkuIdList = null; if (StringUtils.isNotEmpty(query.getGoodsSkuName())) { List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(query.getGoodsSkuName()) List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(query.getGoodsSkuName(), SecurityConstants.INNER) .getData(); goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) .collect(Collectors.toSet()); @@ -71,24 +80,113 @@ } @Override @GlobalTransactional(rollbackFor = Exception.class) @Transactional public void saveAuctionGoods(AuctionGoodsDTO dto) { Long id = dto.getId(); Long goodsSkuId = dto.getGoodsSkuId(); AuctionGoods auctionGoods = BeanUtils.copyBean(dto, AuctionGoods.class); // 添加 if (StringUtils.isNull(id)) { if (StringUtils.isNull(goodsSkuId)) { throw new ServiceException("商品id不能为空"); } GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId).getData(); GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER) .getData(); if (StringUtils.isNull(goodsSku)) { throw new ServiceException("商品不存在"); } AuctionGoods auctionGoods = BeanUtils.copyBean(dto, AuctionGoods.class); if (goodsSku.getStock() < dto.getAuctionStock()) { throw new ServiceException("商品库存不足"); } this.save(auctionGoods); // 扣减商品库存 goodsSkuClient.deductStock(goodsSkuId, dto.getAuctionStock(), SecurityConstants.INNER); } else { // 编辑 AuctionGoods auctionGoodsOrg = this.getById(id); if (StringUtils.isNull(auctionGoodsOrg)) { throw new ServiceException("拍卖商品不存在"); } if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { throw new ServiceException("该商品正在拍卖中,不能修改"); } GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER) .getData(); if (StringUtils.isNull(goodsSku)) { throw new ServiceException("商品不存在"); } 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()); auctionGoodsOrg.setEndTime(dto.getEndTime()); auctionGoodsOrg.setAuctionStock(dto.getAuctionStock()); auctionGoodsOrg.setBond(dto.getBond()); auctionGoodsOrg.setAuthentication(dto.getAuthentication()); auctionGoodsOrg.setDescription(dto.getDescription()); auctionGoodsOrg.setShareTitle(dto.getShareTitle()); auctionGoodsOrg.setSharePic(dto.getSharePic()); this.updateById(auctionGoodsOrg); // 扣减库存 goodsSkuClient.deductStock(auctionGoodsOrg.getGoodsSkuId(), auctionGoodsOrg.getAuctionStock(), SecurityConstants.INNER); } } /** * 查看拍卖商品详情 * * @param id 拍卖商品id * @return AuctionGoodsVO */ @Override public AuctionGoodsVO getAuctionGoodsById(Long id) { AuctionGoods auctionGoods = this.getById(id); if (StringUtils.isNull(auctionGoods)) { throw new ServiceException("拍卖商品不存在"); } AuctionGoodsVO auctionGoodsVO = BeanUtils.copyBean(auctionGoods, AuctionGoodsVO.class); if (!auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_PREVIEW)) { List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() .eq(AuctionBidRecord::getGoodsSkuId, auctionGoods.getGoodsSkuId()) .orderByDesc(AuctionBidRecord::getLastBidAmount).list(); if (StringUtils.isNotEmpty(list)) { Set<Long> collect = list.stream().map(AuctionBidRecord::getMemberId) .collect(Collectors.toSet()); List<Member> memberList = memberClient. getMemberListByIds(collect, SecurityConstants.INNER).getData(); Map<Long, String> memberMap = memberList.stream() .collect(Collectors.toMap(Member::getId, Member::getNickname)); List<AuctionBidRecordVO> auctionBidRecordVOS = BeanUtils.copyList(list, AuctionBidRecordVO.class); for (AuctionBidRecordVO vo : auctionBidRecordVOS) { String memberName = memberMap.get(vo.getMemberId()); vo.setMemberName(StringUtils.isNotEmpty(memberName) ? memberName : ""); } auctionGoodsVO.setRecordList(auctionBidRecordVOS); } } return auctionGoodsVO; } /** * 立即结束 * * @param id 拍卖商品id */ @Override public void stopAuctionGoods(Long id) { AuctionGoods auctionGoods = this.lambdaQuery().eq(AuctionGoods::getId, id) .eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION).one(); if (StringUtils.isNull(auctionGoods)) { throw new ServiceException("拍卖商品不存在"); } } } ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
@@ -14,6 +14,7 @@ import com.ruoyi.auction.service.IAuctionBidRecordService; import com.ruoyi.auction.service.IAuctionSalesroomGoodsService; import com.ruoyi.auction.service.IAuctionSalesroomService; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; @@ -103,7 +104,8 @@ forepartAuctionSalesroomGoodsVO.setItemQuantity(auctionSalesroomGoods.getItemQuantity()); forepartAuctionSalesroomGoodsVO.setListingDuration(auctionSalesroomGoods.getListingDuration()); forepartAuctionSalesroomGoodsVO.setStartTime(auctionSalesroomGoods.getStartTime()); R<GoodsSku> goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionSalesroomGoods.getGoodsSkuId()); R<GoodsSku> goodsSkuOne = goodsSkuClient.getGoodsSkuOne( auctionSalesroomGoods.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku=goodsSkuOne.getData(); forepartAuctionSalesroomGoodsVO.setCoverPic(goodsSku.getCoverPic()); forepartAuctionSalesroomGoodsVO.setDescription(goodsSku.getDescription()); @@ -150,7 +152,8 @@ List<AuctionSalesroomGoods> auctionSalesroomGoods=iAuctionSalesroomGoodsService.list(wrapper); for (AuctionSalesroomGoods salesroomGoods:auctionSalesroomGoods){ ForepartAuctionSalesroomGoodsVO forepartAuctionSalesroomGoodsVO1=new ForepartAuctionSalesroomGoodsVO(); R<GoodsSku> goodsSkuOne = goodsSkuClient.getGoodsSkuOne(salesroomGoods.getGoodsSkuId()); R<GoodsSku> goodsSkuOne = goodsSkuClient.getGoodsSkuOne( salesroomGoods.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku=goodsSkuOne.getData(); forepartAuctionSalesroomGoodsVO1.setGoodsSkuName(salesroomGoods.getGoodsSkuName()); forepartAuctionSalesroomGoodsVO1.setCoverPic(goodsSku.getCoverPic()); @@ -166,7 +169,8 @@ AuctionSalesroomGoods auctionSalesroomGoods= iAuctionSalesroomGoodsService.getOne(wrapper); ForepartAuctionSalesroomGoodsVO currentAuctionSalesroomGoods= new ForepartAuctionSalesroomGoodsVO(); currentAuctionSalesroomGoods.setGoodsSkuName(auctionSalesroomGoods.getGoodsSkuName()); R<GoodsSku> goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionSalesroomGoods.getGoodsSkuId()); R<GoodsSku> goodsSkuOne = goodsSkuClient.getGoodsSkuOne( auctionSalesroomGoods.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku=goodsSkuOne.getData(); currentAuctionSalesroomGoods.setCoverPic(goodsSku.getCoverPic()); auctionSalesroomVO.setCurrentAuctionSalesroomGoods(currentAuctionSalesroomGoods); @@ -182,7 +186,8 @@ if (auctionSalesroomGoods1!=null){ list.add(auctionSalesroomGoods.getSortNum()+1); nextAuctionSalesroomGoods.setNextGoodsSkuName(auctionSalesroomGoods1.getGoodsSkuName()); R<GoodsSku> goodsSkuOne1 = goodsSkuClient.getGoodsSkuOne(auctionSalesroomGoods.getGoodsSkuId()); R<GoodsSku> goodsSkuOne1 = goodsSkuClient.getGoodsSkuOne( auctionSalesroomGoods.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku1=goodsSkuOne1.getData(); nextAuctionSalesroomGoods.setCoverPic(goodsSku1.getCoverPic()); auctionSalesroomVO.setNextAuctionSalesroomGoods(nextAuctionSalesroomGoods); @@ -196,7 +201,8 @@ List<AuctionSalesroomGoods> auctionSalesroomGoods2=iAuctionSalesroomGoodsService.list(wrapper2); for (AuctionSalesroomGoods salesroomGoods:auctionSalesroomGoods2){ ForepartAuctionSalesroomGoodsVO forepartAuctionSalesroomGoodsVO1=new ForepartAuctionSalesroomGoodsVO(); R<GoodsSku> goodsSkuOne2 = goodsSkuClient.getGoodsSkuOne(salesroomGoods.getGoodsSkuId()); R<GoodsSku> goodsSkuOne2 = goodsSkuClient.getGoodsSkuOne( salesroomGoods.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku2=goodsSkuOne2.getData(); forepartAuctionSalesroomGoodsVO1.setGoodsSkuName(salesroomGoods.getGoodsSkuName()); forepartAuctionSalesroomGoodsVO1.setCoverPic(goodsSku2.getCoverPic()); @@ -275,7 +281,8 @@ OrderAuctionBondDTO orderAuctionBondDTO=new OrderAuctionBondDTO(); orderAuctionBondDTO.setAuctionSalesroomId(auctionSalesroom.getId()); orderAuctionBondDTO.setUserList(list); orderClient.getOrderAuctionBond(orderAuctionBondDTO); orderClient.getOrderAuctionBond(orderAuctionBondDTO, SecurityConstants.INNER); } } @@ -368,7 +375,8 @@ order.setGoodsQuantity(1); order.setTotalAmount(lastBidAmount); R<MemberAddress> memberAddressR=emberClient.getMemberAddressOne(memberId); R<MemberAddress> memberAddressR = emberClient.getMemberAddressOne(memberId, SecurityConstants.INNER); MemberAddress memberAddress=memberAddressR.getData(); order.setReceiverCity(memberAddress.getCity()); order.setReceiverDetailAddress(memberAddress.getDetailedAddress()); ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionVideoServiceImpl.java
@@ -9,6 +9,7 @@ import com.ruoyi.auction.mapper.AuctionVideoMapper; import com.ruoyi.auction.service.IAuctionSalesroomGoodsService; import com.ruoyi.auction.service.IAuctionVideoService; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.system.api.domain.PromotionVideo; import com.ruoyi.system.api.feignClient.PromotionClient; @@ -42,7 +43,8 @@ */ @Override public List<PromotionVideo> getVoidList() { R<List<PromotionVideo>> promotionVideoList=promotionClient.getPromotionVideoList(); R<List<PromotionVideo>> promotionVideoList = promotionClient.getPromotionVideoList( SecurityConstants.INNER); List<PromotionVideo> promotionVideos=promotionVideoList.getData(); return promotionVideos; } @@ -69,7 +71,9 @@ iAuctionVideoService.removeById(auctionVideo); } R<PromotionVideo> promotionVideo=promotionClient.getPromotionVideoOne(orepartAuctionVideo.getPromotionVideoId()); R<PromotionVideo> promotionVideo = promotionClient.getPromotionVideoOne( orepartAuctionVideo.getPromotionVideoId(), SecurityConstants.INNER); PromotionVideo promotionVideo1= promotionVideo.getData(); AuctionVideo auctionVideo1=new AuctionVideo(); ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/MemberBondServiceImpl.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.auction.service.impl; import com.ruoyi.auction.domain.MemberBond; import com.ruoyi.auction.mapper.MemberBondMapper; import com.ruoyi.auction.service.IMemberBondService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * 服务实现类 * </p> * * @author mitao * @since 2024-05-27 */ @Service public class MemberBondServiceImpl extends ServiceImpl<MemberBondMapper, MemberBond> implements IMemberBondService { } ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/MemberBondMapper.xml
New file @@ -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.MemberBondMapper"> </mapper> ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSeckillController.java
@@ -32,6 +32,7 @@ private final IGoodsSeckillService goodsSeckillService; @InnerAuth @PostMapping("/getGoodsSeckillOne") @ResponseBody public R<GoodsSeckill> getGoodsSeckillOne(@RequestBody Integer goodsSkuId) { ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
@@ -10,8 +10,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; 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; @@ -34,6 +36,7 @@ * 获取当前商品信息 * */ @InnerAuth @PostMapping("/getGoodsSkuOne") @ResponseBody public R<GoodsSku> getGoodsSkuOne(@RequestBody Integer goodsSkuId) { @@ -42,7 +45,7 @@ } @InnerAuth @PostMapping("/updateGoodsSkuOne") @ResponseBody public R<Boolean> updateGoodsSkuOne(@RequestBody GoodsSku goodsSku) { @@ -57,8 +60,36 @@ * @return List<GoodsSku>商品SKU列表 */ @InnerAuth @GetMapping("/goods-sku/name/{goodsSkuName}") @GetMapping("/name/{goodsSkuName}") R<List<GoodsSku>> getGoodsByName(@PathVariable("goodsSkuName") String goodsSkuName) { 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(); } /** * 退回商品库存 * * @param goodsSkuId 商品SKU ID * @param auctionStock 拍卖商品库存 */ @InnerAuth @PutMapping("/goods-sku/returning-stock") R<?> returningStock(@RequestParam("goodsSkuId") Long goodsSkuId, @RequestParam("auctionStock") Integer auctionStock) { iGoodsSkuService.returningStock(goodsSkuId, auctionStock); return R.ok(); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -51,4 +51,14 @@ * @return List<GoodsSku>商品SKU列表 */ List<GoodsSku> getGoodsByName(String goodsSkuName); /** * 扣减商品库存 * * @param goodsSkuId 商品SKU ID * @param auctionStock 拍卖库存 */ void deductStock(Long goodsSkuId, Integer auctionStock); void returningStock(Long goodsSkuId, Integer auctionStock); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/async/AsyncMethodService.java
@@ -1,5 +1,6 @@ package com.ruoyi.goods.service.async; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.goods.domain.GoodsGroupPurchase; @@ -80,14 +81,15 @@ private void handleEndDelayTask(Long id, DelayTaskEnum delayTaskEnum, LocalDateTime endTime) { String endTaskKey = delayTaskEnum.getCode() + "-" + id; DelayTask endDelayTask = sysUserClient.getDelayTask( endTaskKey).getData(); endTaskKey, SecurityConstants.INNER).getData(); // 如果延时任务为空,创建延时任务控制活动定时开始和结束 Duration duration = Duration.between(LocalDateTime.now(), endTime); if (StringUtils.isNull(endDelayTask)) { createEndDelayTask(endTime, endTaskKey, duration); } else { if (!endDelayTask.getExecuteTime().isEqual(endTime)) { sysUserClient.deleteDelayTask(endTaskKey); sysUserClient.deleteDelayTask(endTaskKey, SecurityConstants.INNER); redisService.deleteObject(endTaskKey); createEndDelayTask(endTime, endTaskKey, duration); } @@ -106,7 +108,7 @@ endDelayTask.setCreateTime(LocalDateTime.now()); endDelayTask.setExecuteTime(endTime); endDelayTask.setRedisKey(seckillEndTaskKey); sysUserClient.addDelayTask(endDelayTask); sysUserClient.addDelayTask(endDelayTask, SecurityConstants.INNER); } private void handleStartDelayTask(Long id, DelayTaskEnum delayTaskEnum, LocalDateTime startTime, @@ -117,7 +119,7 @@ startTime, timeout, TimeUnit.SECONDS); //查询延时任务 DelayTask startDelayTask = sysUserClient.getDelayTask( startTaskKey).getData(); startTaskKey, SecurityConstants.INNER).getData(); if (StringUtils.isNull(startDelayTask)) { startDelayTask = new DelayTask(); startDelayTask.setDelFlag(0); @@ -125,11 +127,11 @@ startDelayTask.setExecuteTime(LocalDateTime.now().plusSeconds(timeout)); startDelayTask.setRedisKey( startTaskKey); sysUserClient.addDelayTask(startDelayTask); sysUserClient.addDelayTask(startDelayTask, SecurityConstants.INNER); } else { if (!startDelayTask.getExecuteTime().isEqual(startTime)) { sysUserClient.deleteDelayTask( startTaskKey); startTaskKey, SecurityConstants.INNER); redisService.deleteObject( startTaskKey); startDelayTask.setDelFlag(0); @@ -137,7 +139,7 @@ startDelayTask.setExecuteTime(LocalDateTime.now().plusSeconds(timeout)); startDelayTask.setRedisKey( startTaskKey); sysUserClient.addDelayTask(startDelayTask); sysUserClient.addDelayTask(startDelayTask, SecurityConstants.INNER); } } log.info(">>>>>>>>>>>>>>>>>>>>延时任务{}执行了<<<<<<<<<<<<<<<<<<<<", startTaskKey); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.GroupStatusEnum; import com.ruoyi.common.core.enums.ListingStatusEnum; import com.ruoyi.common.core.enums.PaymentMethodEnum; @@ -127,7 +128,8 @@ GoodsGroupPurchaseVO vo = BeanUtils.copyBean(groupPurchase, GoodsGroupPurchaseVO.class); //远程调用订单服务查询商品购买总数 Integer num = orderClient.getGroupPurchasesGoodsNum(groupPurchase.getId()).getData(); Integer num = orderClient.getGroupPurchasesGoodsNum(groupPurchase.getId(), SecurityConstants.INNER).getData(); vo.setBuyNumber(num); return vo; } @@ -217,7 +219,8 @@ //判断商品状态,未成团则查询关联订单,进行退款;成团就直接修改状态 if (groupPurchase.getGroupStatus().equals(GroupStatusEnum.TO_FORM_A_GROUP)) { //查询关联订单 List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id).getData(); List<Order> orderList = orderClient.getOrderByGroupPurchaseId(id, SecurityConstants.INNER).getData(); for (Order order : orderList) { if (PaymentMethodEnum.ALIPAY.equals(order.getPaymentMethod())) { //TODO 退款 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.ListingStatusEnum; import com.ruoyi.common.core.enums.StartStatusEnum; import com.ruoyi.common.core.exception.ServiceException; @@ -160,7 +161,8 @@ GoodsSeckillVO vo = BeanUtils.copyBean(goodsSeckill, GoodsSeckillVO.class); GoodsSku goods = goodsSkuService.getById(goodsSeckill.getGoodsSkuId()); Optional.of(goods).ifPresent(goodsSku -> vo.setGoodsSkuName(goodsSku.getSkuName())); Integer num = orderClient.getSeckillMembers(goodsSeckill.getGoodsSkuId()).getData(); Integer num = orderClient.getSeckillMembers(goodsSeckill.getGoodsSkuId(), SecurityConstants.INNER).getData(); vo.setNumberOfPurchasedMembers(num); return vo; } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -72,6 +72,10 @@ if (Objects.isNull(dto.getId())) { this.save(goodsSku); } else { GoodsSku goodsSkuOrg = this.getById(dto.getId()); if (StringUtils.isNull(goodsSkuOrg)) { throw new ServiceException("商品不存在"); } this.updateById(goodsSku); } @@ -198,4 +202,38 @@ .like(StringUtils.isNotEmpty(goodsSkuName), GoodsSku::getSkuName, goodsSkuName) .list(); } /** * 扣减商品库存 * * @param goodsSkuId 商品SKU ID * @param auctionStock 拍卖库存 */ @Override public void deductStock(Long goodsSkuId, Integer auctionStock) { GoodsSku goodsSku = this.getById(goodsSkuId); if (StringUtils.isNull(goodsSku)) { throw new ServiceException("商品不存在"); } if (goodsSku.getStock() < auctionStock) { 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()) .update(); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberController.java
@@ -4,21 +4,19 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.member.service.IMemberService; import com.ruoyi.system.api.domain.Member; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.poi.ss.formula.functions.T; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import util.HuaWeiOBSUtil; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; /** * <p> @@ -33,8 +31,6 @@ public class MemberController { @Resource private IMemberService iMemberService; @RequestMapping("/getMembeOne") @ResponseBody ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java
@@ -3,17 +3,14 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.member.domain.MemberPoints; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.member.domain.pojo.MemberPoints; import com.ruoyi.member.service.IMemberPointsService; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; /** * <p> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/inner/MemberController.java
New file @@ -0,0 +1,32 @@ package com.ruoyi.member.controller.inner; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.member.service.IMemberService; import com.ruoyi.system.api.domain.Member; import java.util.List; import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @author mitao * @date 2024/5/27 */ @RestController @RequestMapping("/member") @RequiredArgsConstructor public class MemberController { private final IMemberService memberService; @InnerAuth @PostMapping("/list-by-ids") R<List<Member>> getMemberListByIds(@RequestParam("memberIdList") Set<Long> memberIdList) { return R.ok(memberService.getMemberListByIds(memberIdList)); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/MemberLevel.java
File was renamed from ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberLevel.java @@ -1,4 +1,4 @@ package com.ruoyi.member.domain.pojo; package com.ruoyi.member.domain; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/MemberPoints.java
File was renamed from ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java @@ -1,4 +1,4 @@ package com.ruoyi.member.domain.pojo; package com.ruoyi.member.domain; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/Region.java
File was renamed from ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/Region.java @@ -1,4 +1,4 @@ package com.ruoyi.member.domain.pojo; package com.ruoyi.member.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberLevelMapper.java
@@ -1,7 +1,7 @@ package com.ruoyi.member.mapper; import com.ruoyi.member.domain.pojo.MemberLevel; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.member.domain.MemberLevel; /** * <p> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java
@@ -1,7 +1,7 @@ package com.ruoyi.member.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.member.domain.pojo.MemberPoints; import com.ruoyi.member.domain.MemberPoints; /** * <p> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/RegionMapper.java
@@ -1,7 +1,7 @@ package com.ruoyi.member.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.member.domain.pojo.Region; import com.ruoyi.member.domain.Region; import com.ruoyi.member.domain.vo.RegionVo; import java.util.List; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberLevelService.java
@@ -1,7 +1,7 @@ package com.ruoyi.member.service; import com.ruoyi.member.domain.pojo.MemberLevel; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.MemberLevel; /** * <p> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java
@@ -2,10 +2,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.member.domain.MemberPoints; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.member.domain.pojo.MemberPoints; import java.util.List; /** * <p> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberService.java
@@ -1,8 +1,10 @@ package com.ruoyi.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.system.api.domain.Member; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; import java.util.Set; /** * <p> @@ -22,4 +24,5 @@ void authentificationMembe(MemberDTO memberDTO); List<Member> getMemberListByIds(Set<Long> memberIdList); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IRegionService.java
@@ -1,7 +1,7 @@ package com.ruoyi.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.pojo.Region; import com.ruoyi.member.domain.Region; import com.ruoyi.member.domain.vo.RegionVo; import java.util.List; ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberLevelServiceImpl.java
@@ -1,9 +1,9 @@ package com.ruoyi.member.service.impl; import com.ruoyi.member.domain.pojo.MemberLevel; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.member.domain.MemberLevel; import com.ruoyi.member.mapper.MemberLevelMapper; import com.ruoyi.member.service.IMemberLevelService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
@@ -5,13 +5,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.member.domain.MemberPoints; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.member.domain.pojo.MemberPoints; import com.ruoyi.member.mapper.MemberPointsMapper; import com.ruoyi.member.service.IMemberPointsService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.stereotype.Service; /** * <p> ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -3,16 +3,24 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.core.enums.GenderEnum; import com.ruoyi.common.core.exception.ServiceException; import org.apache.commons.io.IOUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.enums.GenderEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.member.dto.MemberDTO; import com.ruoyi.system.api.domain.Member; import com.ruoyi.member.mapper.MemberMapper; import com.ruoyi.member.service.IMemberService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.api.domain.Member; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; @@ -21,13 +29,6 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; /** * <p> @@ -189,7 +190,10 @@ return result; } @Override public List<Member> getMemberListByIds(Set<Long> memberIdList) { return this.listByIds(memberIdList); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/RegionServiceImpl.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.member.domain.pojo.Region; import com.ruoyi.member.domain.Region; import com.ruoyi.member.domain.vo.RegionVo; import com.ruoyi.member.mapper.RegionMapper; import com.ruoyi.member.service.IRegionService; ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderAuctionBondController.java
@@ -2,12 +2,16 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.order.service.IOrderAuctionBondService; import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO; import org.apache.poi.ss.formula.functions.T; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import org.apache.poi.ss.formula.functions.T; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** * <p> @@ -28,6 +32,7 @@ * 获取当前商品信息 * */ @InnerAuth @PostMapping("/getOrderAuctionBond") @ResponseBody public R<T> getOrderAuctionBond(@RequestBody OrderAuctionBondDTO orderAuctionBondDTO) { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.OrderFromEnum; import com.ruoyi.common.core.utils.page.PageDTO; @@ -85,7 +86,8 @@ wrapper.eq(OrderMall::getOrderId, order.getId()); wrapper.eq(OrderMall::getDelFlag, 0); OrderMall orderMall= iOrderMallService.getOne(wrapper); R<GoodsSku> goodsSkuR=goodsSkuClient.getGoodsSkuOne(orderMall.getGoodsSkuId()); R<GoodsSku> goodsSkuR = goodsSkuClient.getGoodsSkuOne(orderMall.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku=goodsSkuR.getData(); OrderName=goodsSku.getSkuName(); }else{ @@ -93,9 +95,11 @@ wrapper.eq(OrderAuction::getOrderId, order.getId()); wrapper.eq(OrderAuction::getDelFlag, 0); OrderAuction orderAuction=iOrderAuctionService.getOne(wrapper); R<GoodsSeckill> goodsSeckillR=goodsSkuClient.getGoodsSeckillOne(orderAuction.getSalesroomGoodsId()); R<GoodsSeckill> goodsSeckillR = goodsSkuClient.getGoodsSeckillOne( orderAuction.getSalesroomGoodsId(), SecurityConstants.INNER); GoodsSeckill goodsSeckill=goodsSeckillR.getData(); R<GoodsSku> goodsSkuR=goodsSkuClient.getGoodsSkuOne(goodsSeckill.getGoodsSkuId()); R<GoodsSku> goodsSkuR = goodsSkuClient.getGoodsSkuOne(goodsSeckill.getGoodsSkuId(), SecurityConstants.INNER); GoodsSku goodsSku=goodsSkuR.getData(); OrderName=goodsSku.getSkuName(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/DelayTaskController.java
@@ -2,6 +2,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.annotation.InnerAuth; import com.ruoyi.system.api.domain.DelayTask; import com.ruoyi.system.service.DelayTaskService; import lombok.RequiredArgsConstructor; @@ -25,18 +26,21 @@ private final DelayTaskService delayTaskService; @InnerAuth @PostMapping("/getDelayTask") public R<DelayTask> getDelayTask(@RequestBody String key) { DelayTask delayTask = delayTaskService.getDelayTask(key); return R.ok(delayTask); } @InnerAuth @PostMapping("/addDelayTask") public R<?> addDelayTask(@RequestBody DelayTask delayTask) { delayTaskService.addDelayTask(delayTask); return R.ok(); } @InnerAuth @PostMapping("/deleteDelayTask") public R<?> deleteDelayTask(@RequestBody String key) { delayTaskService.deleteDelayTask(key); ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
@@ -1,6 +1,7 @@ package com.ruoyi.system.listener; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.constants.DelayTaskEnum; @@ -87,26 +88,26 @@ @Async public void autoStartSeckill(Long seckillId) { log.info("autoStartSeckill scheduler task is running :{}", seckillId); goodsSkuClient.startSeckill(seckillId); goodsSkuClient.startSeckill(seckillId, SecurityConstants.INNER); } @Async public void autoEndSeckill(Long seckillId) { log.info("autoEndSeckill scheduler task is running :{}", seckillId); goodsSkuClient.endSeckill(seckillId); goodsSkuClient.endSeckill(seckillId, SecurityConstants.INNER); } @Async public void autoStartGroupPurchase(Long GroupPurchaseId) { log.info("autoStartGroupPurchase scheduler task is running :{}", GroupPurchaseId); goodsSkuClient.startGroupPurchase(GroupPurchaseId); goodsSkuClient.startGroupPurchase(GroupPurchaseId, SecurityConstants.INNER); } @Async public void autoEndGroupPurchase(Long GroupPurchaseId) { log.info("autoEndGroupPurchase scheduler task is running :{}", GroupPurchaseId); goodsSkuClient.endGroupPurchase(GroupPurchaseId); goodsSkuClient.endGroupPurchase(GroupPurchaseId, SecurityConstants.INNER); } @Async