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 |  209 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 154 insertions(+), 55 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 501d173..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
@@ -5,6 +5,9 @@
 
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.feignClient.*;
 import com.ruoyi.account.api.model.*;
@@ -56,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.*;
@@ -110,6 +114,9 @@
     private  ShopBalanceStatementClient shopBalanceStatementClient;
 
     @Resource
+    private GoodsEvaluateClient goodsEvaluateClient;
+
+    @Resource
     private SystemConfigClient systemConfigClient;
 
     @Resource
@@ -139,21 +146,35 @@
         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();
-        BeanUtils.copyProperties(orderGood, orderGoodsVO);
+        orderGoodsVO.setGoodsId(goods.getId());
         orderGoodsVO.setGoodsName(goods.getName());
         orderGoodsVO.setGoodsPic(goods.getHomePagePicture());
+        orderGoodsVO.setNum(order.getNum());
+        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();
         orderDetailVO.setOrderGoodsVO(orderGoodsVO);
         Shop shop = shopR.getData();
+
         orderDetailVO.setId(order.getId());
         orderDetailVO.setOrderStatus(order.getOrderStatus());
-        orderDetailVO.setPoint(order.getPoint());
+        orderDetailVO.setPoint(order.getPoint());//使用的积分
         orderDetailVO.setOrderNumber(order.getOrderNumber());
         orderDetailVO.setCreateTime(order.getCreateTime());
         orderDetailVO.setTotalAmount(order.getTotalAmount());
+        orderDetailVO.setPointDeductionAmount(order.getPointDeductionAmount());//积分抵扣金额
         orderDetailVO.setPaymentAmount(order.getPaymentAmount());
         orderDetailVO.setShopName(shop.getName());
         orderDetailVO.setShopAddress(shop.getAddress());
@@ -168,6 +189,10 @@
             e.printStackTrace();
             throw new ServiceException("生成核销码失败");
         }
+        //该商品是否被用户评论
+        Long evaluateId = goodsEvaluateClient.getEvaluateIdByOrderId(order.getId()).getData();
+        orderDetailVO.setEvaluateId(evaluateId);
+
         return orderDetailVO;
     }
 
@@ -183,13 +208,19 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void writeOff(String id, Integer shopId, String technicianId) {
+    public void writeOff(String id, Integer shopId) {
         LoginUser loginUserApplet = tokenService.getLoginUserApplet();
         Order order = orderMapper.selectById(id);
-        boolean check = check(order, shopId, loginUserApplet.getUserid());
-        if (!check) {
+        if (order == null) {
+            throw new ServiceException("订单不存在");
+        }
+        if (!order.getShopId().equals(shopId)) {
             throw new ServiceException("该订单与当前扫码门店不一致");
         }
+        if (order.getOrderStatus()!=3){
+            throw new ServiceException("订单已被核销过");
+        }
+
 
         // 售后设置
         R<BaseSetting> baseSettingR = baseSettingClient.getBaseSetting(5);
@@ -207,10 +238,11 @@
         order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
         order.setEndTime(LocalDateTime.now());
         order.setCancellerAppUserId(loginUserApplet.getUserid());
-        if (StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)) {
-//            order.setTechnicianId(Integer.valueOf(technicianId));
-        }
         orderMapper.updateById(order);
+        //店铺可用金额增加
+        Shop shop = shopClient.getShopById(shopId).getData();
+        shop.setCanWithdrawMoney(shop.getCanWithdrawMoney().add(order.getTotalAmount()));
+        shopClient.updateShop(shop);
     }
 
 
@@ -222,7 +254,7 @@
      */
     @Override
     public PageInfo<OrderPageListVo> getOrderPageList(OrderPageList orderPageList) {
-        Long userid = tokenService.getLoginUser().getUserid();
+       /* Long userid = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userid).getData();
         if (2 == sysUser.getRoleType()) {
             orderPageList.setShopId(sysUser.getObjectId());
@@ -290,7 +322,8 @@
             }
 
         }
-        return pageInfo.setRecords(list);
+        return pageInfo.setRecords(list);*/
+        return null;
     }
 
     /**
@@ -375,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) {
             //返回订单抵扣积分
@@ -385,6 +426,7 @@
 
             appUser.setAvailablePoint(availablePoint);
             appUser.setCancelPoint(cancelPoint);
+            appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());
             appUserClient.editAppUserById(appUser);
             //构建积分流水
             UserPoint userPoint = new UserPoint();
@@ -398,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());
 
@@ -415,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);
@@ -626,13 +666,21 @@
         confirmOrderVo.setCash(good.getSellingPrice());
         confirmOrderVo.setPoint(good.getIntegral());
 
-        //计算活动价格信息
-        Price price = getPrice(goodId);
-        if (null != price) {
-            confirmOrderVo.setCash(price.getCash());
-            confirmOrderVo.setOrderPoint(price.getPoint());
-            confirmOrderVo.setEndTimeStamp(price.getEndTimeStamp());
+        //是否在秒杀活动中
+        GetSeckillActivityInfo info = new GetSeckillActivityInfo();
+        info.setGoodsId(goodId);
+        GoodsSeckill goodsSeckill = seckillActivityInfoClient.getSeckillActivityInfo(info).getData();
+
+        if (null != goodsSeckill){
+            SeckillActivityInfo activityInfo = seckillActivityInfoClient.getSeckillActivityInfoById(goodsSeckill.getSeckillActivityInfoId()).getData();
+            //价格
+            confirmOrderVo.setCash(goodsSeckill.getSellingPrice());//秒杀活动价格
+            confirmOrderVo.setPoint(goodsSeckill.getIntegral());//秒杀活动积分价格
+            confirmOrderVo.setPurchaseLimitNum(activityInfo.getMaxNum());//限购数量
+            confirmOrderVo.setEndTimeStamp(activityInfo.getEndTime().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());//结束时间戳
         }
+
+
         //判断是否是积分支付
         if (type == 1) {//现金
             confirmOrderVo.setOrderMoney(confirmOrderVo.getCash());
@@ -644,7 +692,7 @@
         }
         //限购检查
         //判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
-        if(null == good.getPurchaseLimit() || -1 == good.getPurchaseLimit()){
+        if(null == confirmOrderVo.getPurchaseLimitNum() || -1 == confirmOrderVo.getPurchaseLimitNum()){
             confirmOrderVo.setIsPurchaseLimit(false);
             confirmOrderVo.setPurchaseLimitNum(-1);
         }else{
@@ -659,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;
@@ -675,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( "商品不存在");
         }
@@ -768,7 +817,8 @@
         order.setDelFlag(0);
         order.setCreateTime(LocalDateTime.now());
 
-        orderMapper.insert(order);
+        this.save(order);
+
 
         //构建订单明细数据
         OrderGood orderGood = new OrderGood();
@@ -779,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);
@@ -801,6 +851,7 @@
             //扣减订单支付积分
             appUser.setAvailablePoint(availablePoint);
             appUser.setExchangePoint(exchangePoint );
+            appUser.setTotalPoint(appUser.getTotalPoint() + order.getPoint());//总积分
             //构建积分流水记录
             UserPoint userPoint = new UserPoint();
             userPoint.setType(4);//兑换商品
@@ -899,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);
@@ -961,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();
@@ -980,6 +1037,68 @@
 
     }
 
+    @Override
+    public IPage<OrderPageListVo> getShopOrderList(String content, Integer status, Integer shopId, Integer pageNum, Integer pageSize) {
+        // 创建分页对象
+        Page<Order> page = new Page<>(pageNum, pageSize);
+        // 构建查询条件
+        QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
+        // 添加门店ID条件
+        if (shopId != null) {
+            queryWrapper.eq("shop_id", shopId);
+        }
+        // 添加订单状态条件
+        if (status != null) {
+            queryWrapper.eq("order_status", status);
+        }
+        // 模糊查询条件
+        if (StringUtils.isNotBlank(content)) {
+            // 构建OR条件组:订单编号/商品名/手机号
+            queryWrapper.and(wrapper -> wrapper
+                    .like("order_number", content)  // 订单编号
+                    .or()
+                    .like("goods_name", content)  // 商品名
+                    .or()
+                    .inSql("app_user_id", "select id from t_app_user where phone like '%" + content + "%'")  // 手机号
+            );
+        }
+
+        // 执行分页查询
+        IPage<Order> orderPage = orderMapper.selectPage(page, queryWrapper);
+        // 转换为VO对象
+        return orderPage.convert(this::convertToOrderListVo);
+    }
+
+    @Override
+    public R shopCancelOrder(Long orderId) {
+        Order order = this.getById(orderId);
+        if (Arrays.asList(5, 6, 7).contains(order.getOrderStatus())) {
+            return R.fail("无效的操作");
+        }
+        if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) {
+            return R.fail("订单取消失败");
+        }
+        order.setOrderStatus(5);
+        R r = refundPayMoney(order);
+        if (200 == r.getCode()) {
+            this.updateById(order);
+        }
+        return r;
+    }
+
+    private OrderPageListVo convertToOrderListVo(Order order) {
+        OrderPageListVo vo = new OrderPageListVo();
+        // 复制属性
+        BeanUtils.copyProperties(order, vo);
+        // 查询用户信息
+        AppUser user = appUserClient.getAppUserById(order.getAppUserId());
+        if (user != null) {
+            vo.setPhone(user.getPhone());
+        }
+        return vo;
+    }
+
+
     public String getNumber(Integer size){
         StringBuilder str = new StringBuilder();
         for (int i = 0; i < size; i++) {
@@ -987,27 +1106,7 @@
         }
         return str.toString();
     }
-    /**
-     * 根据商品的价格配置体系获取商品当前的价格
-     */
-    public Price getPrice( Integer goodsId){
-        //判断是否有在秒杀活动时间中的商品
-        Price price = new Price();
-        GetSeckillActivityInfo getSeckillActivityInfo = new GetSeckillActivityInfo();
-        getSeckillActivityInfo.setGoodsId(goodsId);
-        GoodsSeckill goodsSeckill = seckillActivityInfoClient.getSeckillActivityInfo(getSeckillActivityInfo).getData();
-        //没有秒杀活动
-        if(null == goodsSeckill ){
-            return null;
-        }
-        //秒杀活动价格
-        price.setCash(goodsSeckill.getSellingPrice());
-        //计算对应积分
-        price.setPoint(getPoint(price.getCash()));
-        //结束时间
-        price.setEndTimeStamp(goodsSeckill.getEndTime());
-        return price;
-    }
+
     /**
      * 获取现金对应积分
      */

--
Gitblit v1.7.1