From 2c74e3e18bc372f33fcc2f4ea4ab1d9d393c2753 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 05 三月 2025 11:35:34 +0800
Subject: [PATCH] 补充管理后台文件上传
---
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java | 202 +++++++++++++++++++++++++++----------------------
1 files changed, 111 insertions(+), 91 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 89a24f0..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();
}
@@ -373,17 +396,14 @@
req.setSubject("购买商品");
req.setBuyerOpenId(user.getAliOpenid());
req.setBody("购买商品");
+ req.setNotifyUrl("/payment/ali/callBack");
AliPaymentResp data = aliPaymentClient.payment(req).getData();
if(null != data){
- data.setNotifyUrl(data.getNotifyUrl() + "/payment/callBack/ali/all");
data.setOrderId(shopOrder.getId().toString());
return AjaxResult.success(data);
}
}
-
-
- return R.ok();
-
+ return AjaxResult.success();
}
--
Gitblit v1.7.1