From f103ac7bc4f2fbb20a0f2dd3ed97b0ac7fc5f46d Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期五, 11 四月 2025 17:40:24 +0800 Subject: [PATCH] 商家端 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 72 +++++++++++++++++++++++++----------- 1 files changed, 50 insertions(+), 22 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java index e6290ca..4b43a20 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java @@ -59,6 +59,7 @@ import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; @@ -145,14 +146,22 @@ OrderGood orderGood = orderGoodMapper.selectOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId)); String goodJson = orderGood.getGoodJson(); Goods goods = JSONObject.parseObject(goodJson, Goods.class); + GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class); OrderGoodsVO orderGoodsVO = new OrderGoodsVO(); orderGoodsVO.setGoodsId(goods.getId()); orderGoodsVO.setGoodsName(goods.getName()); orderGoodsVO.setGoodsPic(goods.getHomePagePicture()); orderGoodsVO.setNum(order.getNum()); - orderGoodsVO.setSellingPrice(goods.getSellingPrice()); - orderGoodsVO.setIntegral(goods.getIntegral()); + if (null!=goodsSeckill){ + orderGoodsVO.setSellingPrice(goodsSeckill.getSellingPrice()); + orderGoodsVO.setIntegral(goodsSeckill.getIntegral()); + }else { + orderGoodsVO.setSellingPrice(goods.getSellingPrice()); + orderGoodsVO.setIntegral(goods.getIntegral()); + } + + orderGoodsVO.setOriginalPrice(goods.getOriginalPrice()); OrderDetailVO orderDetailVO = new OrderDetailVO(); @@ -181,7 +190,7 @@ throw new ServiceException("生成核销码失败"); } //该商品是否被用户评论 - Long evaluateId = goodsEvaluateClient.getEvaluateIdByUserIdAndGoodId(goods.getId(), order.getAppUserId()).getData(); + Long evaluateId = goodsEvaluateClient.getEvaluateIdByOrderId(order.getId()).getData(); orderDetailVO.setEvaluateId(evaluateId); return orderDetailVO; @@ -207,6 +216,9 @@ } if (!order.getShopId().equals(shopId)) { throw new ServiceException("该订单与当前扫码门店不一致"); + } + if (order.getOrderStatus()!=3){ + throw new ServiceException("订单已被核销过"); } @@ -396,7 +408,15 @@ */ public R refundPayMoney(Order order) { //开始退款 - //先回退积分 + BigDecimal paymentAmount = order.getPaymentAmount(); + if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0 + //微信退款 + RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); + if (!"100".equals(refund.getRa_Status())) { + return R.fail(refund.getRc_CodeMsg());//退款失败 + } + } + //退款成功再回退积分 AppUser appUser = appUserClient.getAppUserById(order.getAppUserId()); if (order.getPoint()>0) { //返回订单抵扣积分 @@ -406,6 +426,7 @@ appUser.setAvailablePoint(availablePoint); appUser.setCancelPoint(cancelPoint); + appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint()); appUserClient.editAppUserById(appUser); //构建积分流水 UserPoint userPoint = new UserPoint(); @@ -419,15 +440,6 @@ userPointClient.saveUserPoint(userPoint); } - BigDecimal paymentAmount = order.getPaymentAmount(); - if (BigDecimal.ZERO.compareTo(order.getPaymentAmount()) < 0) {//支付的金额是否大于0 - //微信退款 - RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback"); - if (!"100".equals(refund.getRa_Status())) { - return R.fail(refund.getRc_CodeMsg());//退款失败 - } - } - order.setRefundStatus(2); order.setRefundTime(LocalDateTime.now()); @@ -436,13 +448,20 @@ goodsClient.editGoodsNum(orderGood.getGoodsId(), -1); //获取商品json Goods good = JSON.parseObject(orderGood.getGoodJson(), Goods.class); + GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class); //门店减少冻结资金 即减少余额, 冻结资金=余额-可用资金 Shop shop = shopClient.getShopById(order.getShopId()).getData(); BigDecimal historicalBalance=shop.getBalance();//历史余额 - BigDecimal variableAmount=good.getSellingPrice();//变动金额 - BigDecimal balance=shop.getBalance().subtract(good.getSellingPrice());//变动后余额 + BigDecimal variableAmount=BigDecimal.ZERO;//变动金额 + if (null != goodsSeckill) { + variableAmount=goodsSeckill.getSellingPrice(); + }else { + variableAmount=good.getSellingPrice(); + } + + BigDecimal balance=shop.getBalance().subtract(variableAmount);//变动后余额 shop.setBalance(balance); shopClient.updateShop(shop); @@ -658,6 +677,7 @@ confirmOrderVo.setCash(goodsSeckill.getSellingPrice());//秒杀活动价格 confirmOrderVo.setPoint(goodsSeckill.getIntegral());//秒杀活动积分价格 confirmOrderVo.setPurchaseLimitNum(activityInfo.getMaxNum());//限购数量 + confirmOrderVo.setEndTimeStamp(activityInfo.getEndTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());//结束时间戳 } @@ -672,7 +692,7 @@ } //限购检查 //判断当前数量是否已经超出限购数量(需要计算已经购买的数量) - if(null == good.getPurchaseLimit() || -1 == good.getPurchaseLimit()){ + if(null == confirmOrderVo.getPurchaseLimitNum() || -1 == confirmOrderVo.getPurchaseLimitNum()){ confirmOrderVo.setIsPurchaseLimit(false); confirmOrderVo.setPurchaseLimitNum(-1); }else{ @@ -687,7 +707,7 @@ sum = orderGoodList.stream().mapToInt(OrderGood::getNum).sum(); } confirmOrderVo.setIsPurchaseLimit((1 + sum) > good.getPurchaseLimit()); - confirmOrderVo.setPurchaseLimitNum(good.getPurchaseLimit() - sum); + confirmOrderVo.setPurchaseLimitNum(confirmOrderVo.getPurchaseLimitNum() - sum); } return confirmOrderVo; @@ -703,6 +723,7 @@ int type=1;//商品类型 1=普通商品,2=秒杀商品 //商品信息 Goods goods = goodsClient.getGoodsById(orderPayment.getGoodId()).getData(); + String goodsJson= JSON.toJSONString(goods); if (null == goods || 1==goods.getDelFlag()){ return R.fail( "商品不存在"); } @@ -796,7 +817,8 @@ order.setDelFlag(0); order.setCreateTime(LocalDateTime.now()); - orderMapper.insert(order); + this.save(order); + //构建订单明细数据 OrderGood orderGood = new OrderGood(); @@ -807,7 +829,7 @@ if (2==type){ orderGood.setSeckillJson(JSON.toJSONString(goodsSeckill)); } - orderGood.setGoodJson(JSON.toJSONString(goods)); + orderGood.setGoodJson(goodsJson); orderGood.setDelFlag(0); orderGood.setCreateTime(LocalDateTime.now()); orderGood.setCashPayment(orderPayment.getPaymentType()==1 ? 1 : 0); @@ -829,6 +851,7 @@ //扣减订单支付积分 appUser.setAvailablePoint(availablePoint); appUser.setExchangePoint(exchangePoint ); + appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());//总积分 //构建积分流水记录 UserPoint userPoint = new UserPoint(); userPoint.setType(4);//兑换商品 @@ -927,11 +950,16 @@ //商品销量增加 goodsClient.editGoodsNum(orderGood.getGoodsId(), 1); Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class); - + GoodsSeckill goodsSeckill = JSON.parseObject(orderGood.getSeckillJson(), GoodsSeckill.class); //门店增加冻结资金 即增加金额, 冻结资金=余额-可用资金 Shop shop = shopClient.getShopById(order.getShopId()).getData(); BigDecimal historicalBalance=shop.getBalance();//历史余额 - BigDecimal variableAmount=goods.getSellingPrice();//变动余额 + BigDecimal variableAmount=BigDecimal.ZERO;//变动金额 + if (null != goodsSeckill) { + variableAmount=goodsSeckill.getSellingPrice(); + }else { + variableAmount=goods.getSellingPrice(); + } BigDecimal balance=shop.getBalance().add(variableAmount);//变动后余额 shop.setBalance(balance); @@ -989,6 +1017,7 @@ Integer cancelPoint = appUser.getCancelPoint() + order.getPoint();//取消订单积分 appUser.setAvailablePoint(availablePoint); appUser.setCancelPoint(cancelPoint); + appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint()); //构建积分流水记录 UserPoint userPoint = new UserPoint(); @@ -1061,7 +1090,6 @@ OrderPageListVo vo = new OrderPageListVo(); // 复制属性 BeanUtils.copyProperties(order, vo); - // 查询用户信息 AppUser user = appUserClient.getAppUserById(order.getAppUserId()); if (user != null) { -- Gitblit v1.7.1