From e68e7ef115d80cecc7f2f0f1c55061ccfff393b7 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Fri, 9 Dec 2022 20:30:58 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E5=AE=8C=E5=96=84=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ShopOrderInfoController.java | 65 ++++++++++++++++--- .../admin/OrderAdminController.java | 2 +- .../me/xiaoyan/point/api/pojo/OrderInfo.java | 2 + .../point/api/pojo/dto/OrderStatus.java | 5 +- .../point/api/pojo/vo/OrderQueryParam.java | 2 + .../point/api/service/OrderInfoService.java | 4 +- .../service/impl/OrderInfoServiceImpl.java | 29 +++++++-- .../xiaoyan/point/api/util/OrderStatus.java | 9 +++ .../point/api/util/QueryWrapperUtil.java | 4 ++ api/src/main/resources/mapper/GoodsMapper.xml | 1 + 10 files changed, 105 insertions(+), 18 deletions(-) create mode 100644 api/src/main/java/me/xiaoyan/point/api/util/OrderStatus.java diff --git a/api/src/main/java/me/xiaoyan/point/api/controller/ShopOrderInfoController.java b/api/src/main/java/me/xiaoyan/point/api/controller/ShopOrderInfoController.java index da520bd..56344f1 100644 --- a/api/src/main/java/me/xiaoyan/point/api/controller/ShopOrderInfoController.java +++ b/api/src/main/java/me/xiaoyan/point/api/controller/ShopOrderInfoController.java @@ -1,13 +1,21 @@ package me.xiaoyan.point.api.controller; import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import me.xiaoyan.point.api.error.BizException; import me.xiaoyan.point.api.pojo.OrderInfo; +import me.xiaoyan.point.api.pojo.UserInfo; import me.xiaoyan.point.api.pojo.vo.CreateOrderData; +import me.xiaoyan.point.api.pojo.vo.OrderQueryParam; +import me.xiaoyan.point.api.pojo.vo.PageDataResult; import me.xiaoyan.point.api.service.GoodsService; import me.xiaoyan.point.api.service.OrderInfoService; +import me.xiaoyan.point.api.util.OrderStatus; +import me.xiaoyan.point.api.util.QueryWrapperUtil; import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -47,9 +55,9 @@ public class ShopOrderInfoController { //TODO 应该定时更新缓存数据 goodsService.queryAllGoodsIdAndStock().forEach(g -> { log.info("缓存 id:{} stock:{} ", g.getId(), g.getStock()); - if(g.getStock() == 0){ + if (g.getStock() == 0) { // 原本就没有库存 - stockOutMap.put(g.getId(),true); + stockOutMap.put(g.getId(), true); } // 缓存库存 stringRedisTemplate.opsForValue().set(cacheKey(g.getId()), g.getStock().toString()); @@ -64,7 +72,7 @@ public class ShopOrderInfoController { int uid = StpUtil.getLoginIdAsInt(); // 如果限制用户只能购买的数量,可以添加一个map记录用户的请求数 int size = stockOutMap.size(); - Long buyId = (long)data.getGoodsId(); + Long buyId = (long) data.getGoodsId(); //1.内存判断 if (size > 0 && stockOutMap.containsKey(buyId) && stockOutMap.get(buyId)) { throw BizException.create("库存不足"); @@ -74,22 +82,59 @@ public class ShopOrderInfoController { if (count < 0) { log.info("stock count ===>" + count); // 对缓存进行库存 还原 - stringRedisTemplate.opsForValue().increment(cacheKey(buyId),data.getBuyCount()); // + stringRedisTemplate.opsForValue().increment(cacheKey(buyId), data.getBuyCount()); // throw BizException.create("库存不足"); } - if(count == 0){ + if (count == 0) { // 此时库存没有了 , 保存到已买完的对象 - stockOutMap.put(buyId,true); + stockOutMap.put(buyId, true); } //3.数据库 - try{ + try { return orderInfoService.create(uid, data); - }catch (BizException e){ + } catch (BizException e) { //下单失败 对缓存进行库存 还原 - stringRedisTemplate.opsForValue().increment(cacheKey(data.getGoodsId()),data.getBuyCount()); // - stockOutMap.put((long)data.getGoodsId(),false); + stringRedisTemplate.opsForValue().increment(cacheKey(data.getGoodsId()), data.getBuyCount()); // + stockOutMap.put((long) data.getGoodsId(), false); throw e; } } + + // 只能查询自己关联的订单信息 + @PostMapping("/query") + public Page query(@RequestBody OrderQueryParam param) { + param.setUid(StpUtil.getLoginIdAsInt()); + return orderInfoService.queryByPage(param, true, false); + } + + @GetMapping("/{id}") + public OrderInfo get(@PathVariable("id") String id) { + return orderInfoService.getOneByIdAndUid(id, StpUtil.getLoginIdAsInt()); + } + + private boolean updateStatus(String id, int status) { + if (!StringUtils.hasText(id)) throw BizException.paramError(); + QueryWrapper q = QueryWrapperUtil.builder() + .eq("id", id) + .eq("uid", StpUtil.getLoginIdAsInt()) + .build(); + return orderInfoService.update( + OrderInfo.builder() + .status(status) + .build(), + q + ); + } + + @PutMapping("/{id}/cancel") + public boolean cancelOrder(@PathVariable("id") String id) { + return updateStatus(id, OrderStatus.CANCELED); + } + + @PutMapping("/{id}/delete") + public boolean deleteOrder(@PathVariable("id") String id) { + return updateStatus(id, OrderStatus.DELETE); + } + } diff --git a/api/src/main/java/me/xiaoyan/point/api/controller/admin/OrderAdminController.java b/api/src/main/java/me/xiaoyan/point/api/controller/admin/OrderAdminController.java index 6a3c692..89ec3e5 100644 --- a/api/src/main/java/me/xiaoyan/point/api/controller/admin/OrderAdminController.java +++ b/api/src/main/java/me/xiaoyan/point/api/controller/admin/OrderAdminController.java @@ -20,7 +20,7 @@ public class OrderAdminController { @PostMapping("/list") public PageDataResult list(@RequestBody OrderQueryParam param) { - return PageDataResult.convert(orderInfoService.queryByPage(param)); + return PageDataResult.convert(orderInfoService.queryByPage(param,false,true)); } // 修改 diff --git a/api/src/main/java/me/xiaoyan/point/api/pojo/OrderInfo.java b/api/src/main/java/me/xiaoyan/point/api/pojo/OrderInfo.java index 0183edd..89f0ce8 100644 --- a/api/src/main/java/me/xiaoyan/point/api/pojo/OrderInfo.java +++ b/api/src/main/java/me/xiaoyan/point/api/pojo/OrderInfo.java @@ -52,5 +52,7 @@ public class OrderInfo { private Integer status; @TableField(exist = false) private UserInfo owner; + @TableField(exist = false) + private Goods goods; } diff --git a/api/src/main/java/me/xiaoyan/point/api/pojo/dto/OrderStatus.java b/api/src/main/java/me/xiaoyan/point/api/pojo/dto/OrderStatus.java index c3656ec..377da53 100644 --- a/api/src/main/java/me/xiaoyan/point/api/pojo/dto/OrderStatus.java +++ b/api/src/main/java/me/xiaoyan/point/api/pojo/dto/OrderStatus.java @@ -2,7 +2,8 @@ package me.xiaoyan.point.api.pojo.dto; public class OrderStatus { public static final int DELETE = 0; - public static final int CANCEL = 1; + public static final int NOT_CONFIRM = 1; public static final int CONFIRM = 2; - public static final int DONE = 3; + public static final int CANCEL = 3; + public static final int FINISH = 4; } diff --git a/api/src/main/java/me/xiaoyan/point/api/pojo/vo/OrderQueryParam.java b/api/src/main/java/me/xiaoyan/point/api/pojo/vo/OrderQueryParam.java index ce73d1e..a1f0664 100644 --- a/api/src/main/java/me/xiaoyan/point/api/pojo/vo/OrderQueryParam.java +++ b/api/src/main/java/me/xiaoyan/point/api/pojo/vo/OrderQueryParam.java @@ -8,4 +8,6 @@ public class OrderQueryParam extends PageParam { private String title; private String createTimeStart; private String createTimeEnd; + private int uid; + private Integer status; } diff --git a/api/src/main/java/me/xiaoyan/point/api/service/OrderInfoService.java b/api/src/main/java/me/xiaoyan/point/api/service/OrderInfoService.java index 7c25286..3368506 100644 --- a/api/src/main/java/me/xiaoyan/point/api/service/OrderInfoService.java +++ b/api/src/main/java/me/xiaoyan/point/api/service/OrderInfoService.java @@ -16,6 +16,8 @@ public interface OrderInfoService extends IService { OrderInfo create(int uid, CreateOrderData data); - Page queryByPage(OrderQueryParam param); + Page queryByPage(OrderQueryParam param,boolean queryGoods,boolean queryUser); + + OrderInfo getOneByIdAndUid(String id, int uid); } diff --git a/api/src/main/java/me/xiaoyan/point/api/service/impl/OrderInfoServiceImpl.java b/api/src/main/java/me/xiaoyan/point/api/service/impl/OrderInfoServiceImpl.java index 11bdc92..b9411aa 100644 --- a/api/src/main/java/me/xiaoyan/point/api/service/impl/OrderInfoServiceImpl.java +++ b/api/src/main/java/me/xiaoyan/point/api/service/impl/OrderInfoServiceImpl.java @@ -72,9 +72,11 @@ public class OrderInfoServiceImpl extends ServiceImpl 0) { + q.eq("status", param.getStatus()); + } + q.orderByDesc("create_time"); final Page page = getBaseMapper().selectPage(param.getPage(), q); page.getRecords().forEach(o -> { - // 查询订单的归属用户 - o.setOwner(userInfoService.getById(o.getUid())); + if (queryUser) { + // 查询订单的归属用户 + o.setOwner(userInfoService.getById(o.getUid())); + } + if (queryGoods) { + // 查询订单商品信息 + o.setGoods(goodsService.getById(o.getGid())); + } }); return page; } + @Override + public OrderInfo getOneByIdAndUid(String id, int uid) { + QueryWrapper q = new QueryWrapper(); + q.eq("uid", uid); + q.eq("id", id); + return getOne(q); + } + public long buyHistoryCount(int uid, int gid) { QueryWrapper q = new QueryWrapper(); q.eq("uid", uid); diff --git a/api/src/main/java/me/xiaoyan/point/api/util/OrderStatus.java b/api/src/main/java/me/xiaoyan/point/api/util/OrderStatus.java new file mode 100644 index 0000000..c733883 --- /dev/null +++ b/api/src/main/java/me/xiaoyan/point/api/util/OrderStatus.java @@ -0,0 +1,9 @@ +package me.xiaoyan.point.api.util; + +public class OrderStatus { + public static final int NOT_CONFIRM = 1; + public static final int CONFIRMED = 2; + public static final int CANCELED = 3; + public static final int FINISH = 4; + public static final int DELETE = 0; +} diff --git a/api/src/main/java/me/xiaoyan/point/api/util/QueryWrapperUtil.java b/api/src/main/java/me/xiaoyan/point/api/util/QueryWrapperUtil.java index e67c662..2ccc495 100644 --- a/api/src/main/java/me/xiaoyan/point/api/util/QueryWrapperUtil.java +++ b/api/src/main/java/me/xiaoyan/point/api/util/QueryWrapperUtil.java @@ -24,6 +24,10 @@ public class QueryWrapperUtil { } return this; } + public QueryWrapperUtil eq(String column, int value) { + q.eq(column, value); + return this; + } public QueryWrapperUtil ne(String column, Object value) { q.ne(column, value); diff --git a/api/src/main/resources/mapper/GoodsMapper.xml b/api/src/main/resources/mapper/GoodsMapper.xml index d513a46..0086583 100644 --- a/api/src/main/resources/mapper/GoodsMapper.xml +++ b/api/src/main/resources/mapper/GoodsMapper.xml @@ -45,6 +45,7 @@ and stock > 0 and category = #{category} and status != 0 + order by online_time desc,id desc