From 17abf0608f62cdd318dba3e7b12a32ea486cb482 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期一, 21 四月 2025 20:34:03 +0800
Subject: [PATCH] 导入导出,财务统计

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  157 ++++++++++++++++++++++++++++++++--------------------
 1 files changed, 96 insertions(+), 61 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 4b43a20..ceb0e8a 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
@@ -57,13 +57,12 @@
 import java.math.RoundingMode;
 
 import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
+import java.time.*;
 
-import java.time.ZoneId;
-import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -189,6 +188,10 @@
             e.printStackTrace();
             throw new ServiceException("生成核销码失败");
         }
+        if(3!=order.getOrderStatus()){
+            //不属于未使用的,应该有个核销\取消时间
+            orderDetailVO.setEndTime(order.getEndTime());
+        }
         //该商品是否被用户评论
         Long evaluateId = goodsEvaluateClient.getEvaluateIdByOrderId(order.getId()).getData();
         orderDetailVO.setEvaluateId(evaluateId);
@@ -253,27 +256,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();
@@ -298,32 +281,25 @@
         }
 
 
-        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());
             }
 
         }
-        return pageInfo.setRecords(list);*/
-        return null;
+        return pageInfo.setRecords(list);
     }
 
     /**
@@ -388,12 +364,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()) {
@@ -419,6 +393,9 @@
         //退款成功再回退积分
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
         if (order.getPoint()>0) {
+            if(null==appUser.getCancelPoint()){
+                appUser.setCancelPoint(0);
+            }
             //返回订单抵扣积分
             Integer historicalPoint = appUser.getAvailablePoint();
             Integer availablePoint = appUser.getAvailablePoint() + order.getPoint();//可用积分
@@ -551,6 +528,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());
@@ -567,19 +546,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")));
@@ -684,11 +660,16 @@
         //判断是否是积分支付
         if (type == 1) {//现金
             confirmOrderVo.setOrderMoney(confirmOrderVo.getCash());
+            Integer availablePoint = appUser.getAvailablePoint();//用户可用积分
+
+            BigDecimal maxPointDeductionAmount = getCashByPoint(availablePoint);//最大可抵扣金额
+
             //计算积分抵扣的金额  将积分转为金额,去掉小数
-            BigDecimal deduction=getCashByPoint(confirmOrderVo.getResidualPoint());
+            //实际抵扣金额
+            BigDecimal deduction= maxPointDeductionAmount.min(confirmOrderVo.getCash());
             confirmOrderVo.setDeduction(deduction);
         }else {//积分
-            confirmOrderVo.setOrderPoint(good.getIntegral());
+            confirmOrderVo.setOrderPoint(confirmOrderVo.getPoint());
         }
         //限购检查
         //判断当前数量是否已经超出限购数量(需要计算已经购买的数量)
@@ -811,7 +792,11 @@
         order.setPointDeductionAmount(pointDeductionAmount.setScale(2, RoundingMode.HALF_EVEN));
         order.setPaymentAmount(paymentMoney);//实际支付价格
         order.setPoint(orderPoint);//使用积分
-        order.setPayMethod(orderPayment.getPaymentType());//支付方式
+        if (orderPayment.getPaymentType()==3 && orderPoint>0){//微信支付 但支付的积分也大于0
+            order.setPayMethod(4);//组合支付
+        }else {
+            order.setPayMethod(orderPayment.getPaymentType());//积分或者微信
+        }
         order.setPayStatus(1);
         order.setShopId(orderPayment.getShopId());
         order.setDelFlag(0);
@@ -844,6 +829,13 @@
         }
         //判断积分是否为零,积分支付
         if (0 != order.getPoint()){
+            if (null==appUser.getAvailablePoint()){
+                appUser.setAvailablePoint(0);
+            }
+            if (null==appUser.getExchangePoint()){
+                appUser.setExchangePoint(0);
+            }
+
             //积分支付
             Integer historicalPoint = appUser.getAvailablePoint();//历史积分
             Integer availablePoint = historicalPoint - orderPoint;//可用积分
@@ -896,6 +888,10 @@
 
         //门店增加冻结资金 即增加余额, 冻结资金=余额-可用资金
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
+        if (null==shop.getBalance()){
+            shop.setBalance(BigDecimal.ZERO);
+        }
+
         BigDecimal historicalBalance=shop.getBalance();//历史余额
         BigDecimal variableAmount=goods.getSellingPrice();//变动金额
         BigDecimal balance=shop.getBalance().add(goods.getSellingPrice());//变动后余额
@@ -1048,8 +1044,11 @@
             queryWrapper.eq("shop_id", shopId);
         }
         // 添加订单状态条件
-        if (status != null) {
-            queryWrapper.eq("order_status", status);
+        if (status != null&&status==4) { //4-已完成 8-已评价
+            queryWrapper.in("order_status",Arrays.asList(4,8));
+        }
+        if (status != null&&status!=4) {//3-待核销 5-已取消
+            queryWrapper.eq("order_status",status);
         }
         // 模糊查询条件
         if (StringUtils.isNotBlank(content)) {
@@ -1079,12 +1078,47 @@
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
+        order.setEndTime(LocalDateTime.now());
         R r = refundPayMoney(order);
         if (200 == r.getCode()) {
             this.updateById(order);
         }
         return r;
     }
+
+    /**
+     * 后台-工作台-折线图
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    @Override
+    public List<OrderStatisticsDetail> getOrderListGroupByDate(LocalDate startTime, LocalDate endTime) {
+        // 查询数据库获取原始数据
+        List<OrderStatisticsDetail> rawData = orderMapper.getOrderListGroupByDate(
+                startTime.atTime(0,0, 0),
+                endTime.atTime(23,59,59)
+        );
+
+        // 创建完整日期范围的映射
+        Map<LocalDate, OrderStatisticsDetail> dateMap = rawData.stream()
+                .collect(Collectors.toMap(
+                        OrderStatisticsDetail::getDateTime,
+                        Function.identity()
+                ));
+
+        // 生成完整日期序列并填充缺失数据
+        List<OrderStatisticsDetail> completeList = new ArrayList<>();
+        for (LocalDate date = startTime; !date.isAfter(endTime); date = date.plusDays(1)) {
+            if (dateMap.containsKey(date)) {
+                completeList.add(dateMap.get(date));
+            } else {
+                completeList.add(new OrderStatisticsDetail(date, 0, BigDecimal.ZERO));
+            }
+        }
+        return completeList;
+    }
+
 
     private OrderPageListVo convertToOrderListVo(Order order) {
         OrderPageListVo vo = new OrderPageListVo();
@@ -1095,6 +1129,7 @@
         if (user != null) {
             vo.setPhone(user.getPhone());
         }
+        vo.setIdStr(order.getId().toString());
         return vo;
     }
 

--
Gitblit v1.7.1