From 3348eda2c33469e9935ae6afcf83ea5c52cea906 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期一, 09 六月 2025 20:07:12 +0800
Subject: [PATCH] 修改bug-初验阶段

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  196 +++++++++++++++++++++++++++++++++---------------
 1 files changed, 133 insertions(+), 63 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 77a9a9f..f632abb 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
@@ -132,6 +132,7 @@
 
     @Override
     public OrderDetailVO getOrderDetail(Long orderId) {
+        OrderDetailVO orderDetailVO = new OrderDetailVO();
         Order order = orderMapper.selectById(orderId);
         if (order == null) {
             throw new ServiceException("订单不存在");
@@ -140,14 +141,17 @@
         if (!R.isSuccess(shopR)) {
             throw new ServiceException("获取门店信息失败");
         }
-
+        AppUser appUserById = appUserClient.getAppUserById(order.getAppUserId());
+        if (appUserById != null) {
+            orderDetailVO.setUsername(appUserById.getName());
+        }
         // 商品
         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());
@@ -163,7 +167,7 @@
 
         orderGoodsVO.setOriginalPrice(goods.getOriginalPrice());
 
-        OrderDetailVO orderDetailVO = new OrderDetailVO();
+
         orderDetailVO.setOrderGoodsVO(orderGoodsVO);
         Shop shop = shopR.getData();
 
@@ -177,6 +181,7 @@
         orderDetailVO.setPaymentAmount(order.getPaymentAmount());
         orderDetailVO.setShopName(shop.getName());
         orderDetailVO.setShopAddress(shop.getAddress());
+        orderDetailVO.setDetailAddress(shop.getDetailAddress());
         orderDetailVO.setLongitude(shop.getLongitude());
         orderDetailVO.setLatitude(shop.getLatitude());
         orderDetailVO.setShopId(shop.getId());
@@ -256,27 +261,7 @@
      * @return
      */
     @Override
-    public PageInfo<OrderPageListVo> getOrderPageList(OrderPageList orderPageList) {
-       /* Long userid = tokenService.getLoginUser().getUserid();
-        SysUser sysUser = sysUserClient.getSysUser(userid).getData();
-        if (2 == sysUser.getRoleType()) {
-            orderPageList.setShopId(sysUser.getObjectId());
-        }
-        //搜索条件,用户姓名
-        if (StringUtils.isNotEmpty(orderPageList.getUserName())) {
-            List<AppUser> data = appUserClient.getAppUserByNameNoFilter(orderPageList.getUserName()).getData();
-            List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if (CollectionUtils.isEmpty(collect)) {
-                return new PageInfo<>();
-            }
-            if (null != orderPageList.getAppUserIds()) {
-                List<Long> appUserIds = orderPageList.getAppUserIds();
-                appUserIds.addAll(collect);
-                orderPageList.setAppUserIds(appUserIds);
-            } else {
-                orderPageList.setAppUserIds(collect);
-            }
-        }
+    public PageInfo<OrderManagePageListVO> getOrderPageList(OrderPageList orderPageList) {
         //搜索条件,用户电话
         if (StringUtils.isNotEmpty(orderPageList.getPhone())) {
             List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(orderPageList.getPhone()).getData();
@@ -300,33 +285,47 @@
             orderPageList.setAppUserIds(orderPageList.getAppUserIds().stream().distinct().collect(Collectors.toList()));
         }
 
+        //搜索条件 店铺名称
+        if (StringUtils.isNotEmpty(orderPageList.getShopName())){
+            List<Integer> shopSet = new ArrayList<>(shopClient.getShopIdByName(orderPageList.getShopName()).getData());
+            if (CollectionUtils.isEmpty(shopSet)) {
+                return new PageInfo<>();
+            }
+            if (null != orderPageList.getShopIds()) {
+                List<Integer> shopIds = orderPageList.getShopIds();
+                if (!containsIntegerAny(shopIds, shopSet)) {
+                    return new PageInfo<>();
+                }
+                shopIds.addAll(shopSet);
+                orderPageList.setShopIds(shopIds);
+            } else {
+                orderPageList.setShopIds(shopSet);
+            }
+        }
+        if (null != orderPageList.getShopIds()) {
+            orderPageList.setShopIds(orderPageList.getShopIds().stream().distinct().collect(Collectors.toList()));
+        }
 
-        PageInfo<OrderPageListVo> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize());
+        PageInfo<OrderManagePageListVO> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize());
 
-        List<OrderPageListVo> list = this.baseMapper.getOrderPageList(pageInfo, orderPageList);
-        for (OrderPageListVo orderPageListVo : list) {
+        List<OrderManagePageListVO> list = this.baseMapper.getOrderPageList(pageInfo, orderPageList);
+
+        for (OrderManagePageListVO orderPageListVo : list) {
             Long appUserId = orderPageListVo.getAppUserId();
             AppUser appUser = appUserClient.getAppUserById(appUserId);
             if (null != appUser) {
                 orderPageListVo.setUserName(appUser.getName());
                 orderPageListVo.setPhone(appUser.getPhone());
             }
-            String expressJson = orderPageListVo.getExpressJson();
-            if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")) {
-                JSONObject jsonObject = null;
-                try {
-                    jsonObject = JSONObject.parseObject(expressJson);
-                    String companyName = ExpressCompanyMap.getCompanyNameByCode(jsonObject.getString("com"));
-                    orderPageListVo.setExpressCompany(companyName);
-                    orderPageListVo.setExpressNum(jsonObject.getString("num"));
-                } catch (Exception e) {
-                }
-
+           //店铺名称
+            Shop shop = shopClient.getShopById(orderPageListVo.getShopId()).getData();
+            if (null != shop) {
+                orderPageListVo.setShopName(shop.getName());
             }
+            orderPageListVo.setIdStr(orderPageListVo.getId().toString());
 
         }
-        return pageInfo.setRecords(list);*/
-        return null;
+        return pageInfo.setRecords(list);
     }
 
     /**
@@ -342,6 +341,28 @@
 
         // 遍历 list2,检查是否有元素存在于 set1 中
         for (Long element : list2) {
+            if (set1.contains(element)) {
+                return true;
+            }
+        }
+
+        // 如果没有找到共同元素,返回 false
+        return false;
+    }
+
+    /**
+     * 判断 list1 是否包含 list2 中的至少一个元素
+     *
+     * @param list1 第一个列表
+     * @param list2 第二个列表
+     * @return 如果 list1 包含 list2 中的至少一个元素,返回 true;否则返回 false
+     */
+    private boolean containsIntegerAny(List<Integer> list1, List<Integer> list2) {
+        // 将 list1 转换为 HashSet 以提高查询效率
+        Set<Integer> set1 = new HashSet<>(list1);
+
+        // 遍历 list2,检查是否有元素存在于 set1 中
+        for (Integer element : list2) {
             if (set1.contains(element)) {
                 return true;
             }
@@ -391,12 +412,10 @@
     @Override
     public R cancelOrder(Long orderId) {
         Order order = this.getById(orderId);
-        if (Arrays.asList(5, 6, 7).contains(order.getOrderStatus())) {
+        if (Arrays.asList(4,5,8).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()) {
@@ -557,6 +576,8 @@
         orderInfo.setOrderNumber(order.getOrderNumber());
         orderInfo.setOrderStatus(order.getOrderStatus());
         orderInfo.setCreateTime(order.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        orderInfo.setPointDeductionAmount(order.getPointDeductionAmount());
+
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
         if (null != appUser) {
             orderInfo.setUserName(appUser.getName());
@@ -573,19 +594,16 @@
         orderInfo.setPaymentAmount(order.getPaymentAmount());
 
 
-        List<OrderGood> orderGoods = orderGoodMapper.selectList(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0));
-        int sum = orderGoods.stream().mapToInt(OrderGood::getNum).sum();
-        orderInfo.setGoodsNum(sum);
-        List<Object> goodsJson = new ArrayList<>();
-        for (OrderGood orderGood : orderGoods) {
-            Goods goods = JSON.parseObject(orderGood.getGoodJson(), Goods.class);
-            Map<String, Object> map = new HashMap<>();
-            map.put("name", goods.getName());
-            map.put("imgUrl", goods.getHomePagePicture());
-            map.put("number", orderGood.getNum());
-            goodsJson.add(map);
+        OrderGood orderGood = orderGoodMapper.selectOne(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0));
+        orderInfo.setGoodsNum(1);
+        orderInfo.setGoodsJson(orderGood.getGoodJson());
+        if (null != orderGood.getSeckillJson()&& !"".equals(orderGood.getSeckillJson())) {
+            orderInfo.setSeckillJson(orderGood.getSeckillJson());
+            orderInfo.setActivityName("秒杀活动");
         }
-        orderInfo.setGoodsJson(JSON.toJSONString(goodsJson));
+
+
+
         orderInfo.setPoint(order.getPoint());
         if (null != order.getAfterSaleTime()) {
             orderInfo.setAfterSaleTime(order.getAfterSaleTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
@@ -822,7 +840,11 @@
         order.setPointDeductionAmount(pointDeductionAmount.setScale(2, RoundingMode.HALF_EVEN));
         order.setPaymentAmount(paymentMoney);//实际支付价格
         order.setPoint(orderPoint);//使用积分
-        order.setPayMethod(orderPayment.getPaymentType());//支付方式
+        if (orderPayment.getPaymentType()==1 && orderPoint>0){//微信支付 但支付的积分也大于0
+            order.setPayMethod(4);//组合支付
+        }else {
+            order.setPayMethod(orderPayment.getPaymentType());//积分或者微信
+        }
         order.setPayStatus(1);
         order.setShopId(orderPayment.getShopId());
         order.setDelFlag(0);
@@ -894,6 +916,37 @@
             UniPayResult uniPayResult = PaymentUtil.uniPay(order.getOrderNumber(), paymentMoney.doubleValue(),  "购买单品商品",
                     goodsNames, "", "/order/order/orderPaymentCallback", appUser.getWxOpenid(), null);
             if(null == uniPayResult || !"100".equals(uniPayResult.getRa_Code())){
+                //支付失败,积分回退 ,删除订单
+                //检查是否先有过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水的删除
+                if (order.getPoint()>0) {
+                    //返回订单抵扣积分
+                    AppUser appUser2 = appUserClient.getAppUserById(order.getAppUserId());
+                    Integer availablePoint = appUser2.getAvailablePoint();//可用积分
+                    Integer variablePoint = order.getPoint();//变动积分
+                    Integer balance = appUser2.getAvailablePoint() + order.getPoint();//变动后积分
+                    Integer cancelPoint = appUser2.getCancelPoint() + order.getPoint();//取消订单积分
+                    appUser2.setAvailablePoint(availablePoint);
+                    appUser2.setCancelPoint(cancelPoint);
+                    appUser2.setTotalPoint(appUser2.getTotalPoint() + order.getPoint());
+
+                    //构建积分流水记录
+                    UserPoint userPoint = new UserPoint();
+                    userPoint.setType(16);//取消订单
+                    userPoint.setHistoricalPoint(availablePoint);
+                    userPoint.setVariablePoint(variablePoint);
+                    userPoint.setBalance(balance);
+                    userPoint.setCreateTime(LocalDateTime.now());
+                    userPoint.setAppUserId(appUser2.getId());
+                    userPoint.setObjectId(order.getId());
+                    userPointClient.saveUserPoint(userPoint);
+
+                    appUserClient.editAppUserById(appUser2);
+
+                    //删除订单
+                    order.setDelFlag(1);
+                    orderMapper.updateById(order);
+                }
+                //返回报错信息
                 return R.fail(null == uniPayResult ? "支付失败" : uniPayResult.getRb_CodeMsg());
             }
             String rc_result = uniPayResult.getRc_Result();
@@ -1029,7 +1082,7 @@
                     log.error("关闭订单失败:{}---->{}", order.getOrderNumber(), JSON.toJSONString(closeOrderResult));
                 }
                 redisTemplate.opsForZSet().remove("OrderPayment", order.getOrderNumber());
-                //关闭订单后,检查是否先有过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水的删除
+                //关闭订单后,检查是否先有过积分抵扣了,是的话要返回订单已抵扣的积分,以及用户积分流水的删除, 删除订单
                 if (order.getPoint()>0) {
                     //返回订单抵扣积分
                     AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
@@ -1053,6 +1106,10 @@
                     userPointClient.saveUserPoint(userPoint);
 
                     appUserClient.editAppUserById(appUser);
+
+                    //删除订单
+                    order.setDelFlag(1);
+                    orderMapper.updateById(order);
                 }
             }
         }
@@ -1065,6 +1122,10 @@
         Page<Order> page = new Page<>(pageNum, pageSize);
         // 构建查询条件
         QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
+        //添加基础条件
+        queryWrapper.eq("del_flag", 0);
+        queryWrapper.eq("pay_status", 2);
+        queryWrapper.orderByDesc("create_time");
         // 添加门店ID条件
         if (shopId != null) {
             queryWrapper.eq("shop_id", shopId);
@@ -1078,13 +1139,21 @@
         }
         // 模糊查询条件
         if (StringUtils.isNotBlank(content)) {
+            //根据手机号查询用户id
+            List<Long> ids= new ArrayList<>();
+            List<AppUser> data = appUserClient.getAppUserByPhone(content).getData();
+            if (data != null && !data.isEmpty()) {
+                ids=data.stream().map(AppUser::getId).collect(Collectors.toList());
+            }
             // 构建OR条件组:订单编号/商品名/手机号
+            if (null != ids && !ids.isEmpty()) {
+                queryWrapper.in("app_user_id",ids);
+            }
+
             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 + "%'")  // 手机号
+                    .like("good_name", content)  // 商品名
             );
         }
 
@@ -1119,11 +1188,12 @@
      * @return
      */
     @Override
-    public List<OrderStatisticsDetail> getOrderListGroupByDate(LocalDate startTime, LocalDate endTime) {
+    public List<OrderStatisticsDetail> getOrderListGroupByDate(LocalDate startTime, LocalDate endTime,Integer shopId) {
         // 查询数据库获取原始数据
         List<OrderStatisticsDetail> rawData = orderMapper.getOrderListGroupByDate(
                 startTime.atTime(0,0, 0),
-                endTime.atTime(23,59,59)
+                endTime.atTime(23,59,59),
+                shopId
         );
 
         // 创建完整日期范围的映射

--
Gitblit v1.7.1