From 4d7a208f388e42e7dd83dab0e38eadfa0847de1c Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期三, 11 十二月 2024 19:24:10 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java | 195 +++++++++++++++++++++++++++--------------------- 1 files changed, 109 insertions(+), 86 deletions(-) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java index fdb537f..0ef3d4a 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java @@ -19,6 +19,9 @@ import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.annotation.Logical; +import com.ruoyi.common.security.annotation.RequiresPermissions; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.order.api.feignClient.OrderClient; import com.ruoyi.order.api.model.TShoppingOrder; @@ -30,6 +33,7 @@ import com.ruoyi.other.service.TActivityService; import com.ruoyi.other.service.TCouponService; import com.ruoyi.other.service.TGoodsService; +import com.ruoyi.other.util.RedisLock; import com.ruoyi.payment.api.feignClient.AliPaymentClient; import com.ruoyi.payment.api.feignClient.WxPaymentClient; import com.ruoyi.payment.api.vo.AliPaymentReq; @@ -37,6 +41,7 @@ import com.ruoyi.payment.api.vo.PaymentOrder; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -44,6 +49,8 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.UUID; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -61,7 +68,6 @@ private TGoodsService goodsService; @Autowired private TActivityService activityService; - @Resource private TokenService tokenService; @Resource @@ -74,6 +80,11 @@ private TCouponService couponService; @Resource private WxPaymentClient wxPaymentClient; + @Resource + private RedisService redisService; + + @Autowired + public RedisTemplate redisTemplate; /** @@ -87,7 +98,9 @@ .like("name", name)).stream().map(TGoods::getId).collect(Collectors.toList()); return R.ok(collect); } - + + + @RequiresPermissions(value = {"/goods/add"}, logical = Logical.OR) @PostMapping("/saveGoods") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品添加") @Log(title = "【商品管理】添加商品", businessType = BusinessType.INSERT) @@ -95,9 +108,10 @@ goodsService.save(dto); return AjaxResult.success(); } - - - + + + + @RequiresPermissions(value = {"/goods/del"}, logical = Logical.OR) @GetMapping("/delete") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品删除") @Log(title = "【商品管理】删除商品", businessType = BusinessType.DELETE) @@ -105,9 +119,10 @@ goodsService.removeBatchByIds(Arrays.asList(ids.split(","))); return AjaxResult.success(); } - - - + + + + @RequiresPermissions(value = {"/goods/update"}, logical = Logical.OR) @PostMapping("/updateVip") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品修改") @Log(title = "【商品管理】修改商品", businessType = BusinessType.UPDATE) @@ -115,9 +130,9 @@ goodsService.updateById(dto); return AjaxResult.success(); } - - - + + + @RequiresPermissions(value = {"/goods/select"}, logical = Logical.OR) @GetMapping("/getInfo") @ApiOperation(tags = {"管理后台-商品管理"},value = "商品查看详情") public AjaxResult<TGoods> getInfo(Integer id) { @@ -152,10 +167,11 @@ return R.ok(byId); } } - - - - + + + + + @RequiresPermissions(value = {"/goods"}, logical = Logical.OR) @ApiOperation(tags = {"管理后台-商品管理"},value = "商品列表分页查询") @PostMapping(value = "/pageList") public AjaxResult<PageInfo<TGoods>> pageList(@RequestBody GoodsDTO dto) { @@ -177,7 +193,6 @@ //检查当前用户积分是否够 Long userId = tokenService.getLoginUserApplet().getUserId(); Integer point = 0; - if (exchangeDto.getGoodType()==1) { //查询当前商品信息 TGoods good = goodsService.getById(exchangeDto.getGoodId()); @@ -203,85 +218,93 @@ return R.ok(); } + + + @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品") @PostMapping(value = "/app/shop") public AjaxResult<PageInfo<TGoods>> shop(@RequestBody ExchangeDto exchangeDto) { - //检查当前用户积分是否够 - Long userId = tokenService.getLoginUserApplet().getUserId(); - Integer point = 0; - TAppUser user = appUserClient.getUserById(userId).getData(); - - if (exchangeDto.getGoodType()==1) { - //查询当前商品信息 - TGoods good = goodsService.getById(exchangeDto.getGoodId()); - point = good.getRedeemPoints(); - //检查当前用户是否到达兑换上限 - Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); - if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) { - return AjaxResult.error("当前用户已兑换"+count+"张"); + //redis锁 和支付使用同一个锁 + RedisLock redisLock = new RedisLock(redisTemplate, "POINT_EXCHANGE_LOCK", 5, 30000); + try { + redisLock.lock(); + Long userId = tokenService.getLoginUserApplet().getUserId(); + Integer point = 0; + TAppUser user = appUserClient.getUserById(userId).getData(); + if (exchangeDto.getGoodType()==1) { + //查询当前商品信息 + TGoods good = goodsService.getById(exchangeDto.getGoodId()); + point = good.getRedeemPoints(); + if (user.getPoints().compareTo(good.getRedeemPoints()) < 0){ + return AjaxResult.error("当前用户积分不足"); + } + //检查当前用户是否到达兑换上限 + Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); + if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) { + return AjaxResult.error("当前用户已兑换"+count+"张"); + }else { + //减少库存 + if (good.getInventory()!=-1) { + good.setInventory(good.getInventory() - exchangeDto.getNum()); + goodsService.updateById(good); + } + } }else { - //减少库存 - if (good.getInventory()!=-1) { - good.setInventory(good.getInventory() - exchangeDto.getNum()); - goodsService.updateById(good); + TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); + point = coupon.getRedeemPoints(); + if (user.getPoints().compareTo(coupon.getRedeemPoints()) < 0){ + return AjaxResult.error("当前用户积分不足"); + } + Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); + if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) { + return AjaxResult.error("当前用户已到达兑换"+coupon+"次"); + }else { + if (coupon.getInventoryQuantity()!=-1) { + coupon.setInventoryQuantity(coupon.getInventoryQuantity() - 1); + couponService.updateById(coupon); + } } } - if (user.getPoints()<good.getRedeemPoints()){ - return AjaxResult.error("当前用户积分不足"); - } - }else { - TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); - point = coupon.getRedeemPoints(); - - Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData(); - if (user.getPoints()<point){ - return AjaxResult.error("当前用户积分不足"); - } - if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) { - return AjaxResult.error("当前用户已到达兑换"+coupon+"次"); - }else { - if (coupon.getInventoryQuantity()!=-1) { - coupon.setInventoryQuantity(coupon.getInventoryQuantity() - 1); - couponService.updateById(coupon); + exchangeDto.setPoint(point); + exchangeDto.setUserId(userId); + //生成积分兑换成功的订单 + R<ExchangeBackDto> longR = orderClient.exchangeCreate(exchangeDto); + if (exchangeDto.getGoodType()==2) { + TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); + + //如果是优惠卷,赠送优惠卷给用户 + GrantCouponDto grantCouponDto = new GrantCouponDto(); + grantCouponDto.setUserIds(userId.toString()); + grantCouponDto.setCouponId(exchangeDto.getGoodId()); + grantCouponDto.setWaysToObtain(1); + grantCouponDto.setEndTime(LocalDateTime.now()); + grantCouponDto.setType(3); + switch (coupon.getValidityPeriodMode()){ + case 1: + grantCouponDto.setEndTime(coupon.getEndTime()); + break; + case 2: + grantCouponDto.setEndTime(LocalDateTime.now().plusDays(coupon.getDays())); + break; } + appCouponClient.grantCoupon(grantCouponDto); } - - + //生成消耗积分的记录 + PointChangeDto pointChangeDto = new PointChangeDto(); + pointChangeDto.setUserId(userId); + pointChangeDto.setPoints(point); + pointChangeDto.setRemark(String.valueOf(longR.getData().getId())); + pointChangeDto.setType(6); + pointChangeDto.setCode(longR.getData().getCode()); + appUserClient.changeDown(pointChangeDto); + return AjaxResult.success(longR.getData().getId()); + }catch (Exception e){ + e.printStackTrace(); + }finally { + //解锁 + redisLock.unlock(); } - exchangeDto.setPoint(point); - exchangeDto.setUserId(userId); - //生成积分兑换成功的订单 - R<ExchangeBackDto> longR = orderClient.exchangeCreate(exchangeDto); - if (exchangeDto.getGoodType()==2) { - TCoupon coupon = couponService.getById(exchangeDto.getGoodId()); - - //如果是优惠卷,赠送优惠卷给用户 - GrantCouponDto grantCouponDto = new GrantCouponDto(); - grantCouponDto.setUserIds(userId.toString()); - grantCouponDto.setCouponId(exchangeDto.getGoodId()); - grantCouponDto.setWaysToObtain(1); - grantCouponDto.setEndTime(LocalDateTime.now()); - grantCouponDto.setType(3); - switch (coupon.getValidityPeriodMode()){ - case 1: - grantCouponDto.setEndTime(coupon.getEndTime()); - break; - case 2: - grantCouponDto.setEndTime(LocalDateTime.now().plusDays(coupon.getDays())); - break; - } - appCouponClient.grantCoupon(grantCouponDto); - } - //生成消耗积分的记录 - PointChangeDto pointChangeDto = new PointChangeDto(); - pointChangeDto.setUserId(userId); - pointChangeDto.setPoints(point); - pointChangeDto.setRemark(String.valueOf(longR.getData().getId())); - pointChangeDto.setType(6); - pointChangeDto.setCode(longR.getData().getCode()); - appUserClient.changeDown(pointChangeDto); - return AjaxResult.success(longR.getData().getId()); - + return AjaxResult.success(); } -- Gitblit v1.7.1