From c74a6f59490cfb9a0ee37f70427739b74e7fbd58 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 20 五月 2026 08:50:29 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java |  236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 232 insertions(+), 4 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
index 1872a60..2d0cbdb 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/RevenueServiceImpl.java
@@ -20,10 +20,15 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.sql.Driver;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import com.doumee.dao.dto.ShopRevenueQueryDTO;
+import com.doumee.dao.vo.DriverKpiVO;
+import com.doumee.dao.vo.DriverOrderTrendVO;
+import com.doumee.dao.vo.DriverRewardHallVO;
+import com.doumee.biz.system.OperationConfigBiz;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 鏀舵敮璁板綍Service瀹炵幇
@@ -47,6 +52,15 @@
 
     @Autowired
     private DriverInfoMapper driverInfoMapper;
+
+    @Autowired
+    private OrdersMapper ordersMapper;
+
+    @Autowired
+    private RewardRecordMapper rewardRecordMapper;
+
+    @Autowired
+    private OperationConfigBiz operationConfigBiz;
 
     @Override
     public Integer create(Revenue revenue) {
@@ -348,4 +362,218 @@
         return vo;
     }
 
+    @Override
+    public DriverKpiVO getDriverKpi(Integer driverId, ShopRevenueQueryDTO query) {
+        QueryWrapper<Orders> qw = new QueryWrapper<>();
+        qw.lambda()
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .eq(Orders::getType, Constants.ONE)
+                .eq(Orders::getAcceptDriver, driverId)
+                .in(Orders::getStatus,
+                        Constants.OrderStatus.waitDeposit.getKey(),
+                        Constants.OrderStatus.deposited.getKey(),
+                        Constants.OrderStatus.accepted.getKey(),
+                        Constants.OrderStatus.delivering.getKey(),
+                        Constants.OrderStatus.arrived.getKey(),
+                        Constants.OrderStatus.finished.getKey());
+        if (query.getStartDate() != null) {
+            qw.lambda().ge(Orders::getCreateTime, query.getStartDate());
+        }
+        if (query.getEndDate() != null) {
+            qw.lambda().le(Orders::getCreateTime, Utils.Date.getEnd(query.getEndDate()));
+        }
+        List<Orders> orders = ordersMapper.selectList(qw);
+
+        DriverKpiVO vo = new DriverKpiVO();
+        vo.setTotalOrderCount(orders.size());
+
+        // 鎬诲畬鎴愯鍗曢噺
+        long finishedCount = orders.stream()
+                .filter(o -> Constants.equalsInteger(o.getStatus(), Constants.OrderStatus.finished.getStatus()))
+                .count();
+        vo.setFinishedOrderCount((int) finishedCount);
+
+        // 鎬昏惀鏀堕噾棰�
+        long totalRevenue = orders.stream()
+                .mapToLong(o -> {
+                    long total = o.getTotalAmount() != null ? o.getTotalAmount() : 0L;
+                    long refund = o.getRefundAmount() != null ? o.getRefundAmount() : 0L;
+                    return total - refund;
+                }).sum();
+        vo.setTotalRevenue(totalRevenue);
+
+        // 鍙告満鍒嗘垚閲戦
+        long driverFee = orders.stream()
+                .mapToLong(o -> o.getDriverFee() != null ? o.getDriverFee() : 0L)
+                .sum();
+        vo.setDriverFeeTotal(driverFee);
+
+        // 閫�娆惧崟鏁�
+        long refundCount = orders.stream()
+                .filter(o -> o.getRefundAmount() != null && o.getRefundAmount() > 0)
+                .count();
+        vo.setRefundOrderCount((int) refundCount);
+
+        // 璐d换鎵f鎬婚锛歊evenue memberId=driverId, memberType=1, type=4
+        QueryWrapper<Revenue> revQw = new QueryWrapper<>();
+        revQw.lambda()
+                .eq(Revenue::getMemberId, driverId)
+                .eq(Revenue::getMemberType, Constants.ONE)
+                .eq(Revenue::getType, Constants.FOUR)
+                .eq(Revenue::getDeleted, Constants.ZERO);
+        if (query.getStartDate() != null) {
+            revQw.lambda().ge(Revenue::getCreateTime, query.getStartDate());
+        }
+        if (query.getEndDate() != null) {
+            revQw.lambda().le(Revenue::getCreateTime, Utils.Date.getEnd(query.getEndDate()));
+        }
+        List<Revenue> deductRecords = revenueMapper.selectList(revQw);
+        long deductTotal = deductRecords.stream()
+                .mapToLong(r -> r.getAmount() != null ? r.getAmount() : 0L)
+                .sum();
+        vo.setDeductTotal(deductTotal);
+
+        return vo;
+    }
+
+    @Override
+    public List<DriverOrderTrendVO> getDriverOrderTrend(Integer driverId) {
+        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd");
+        // 鏋勫缓杩�7澶╂棩鏈熷垪琛�
+        List<String> dateList = new ArrayList<>();
+        for (int i = 6; i >= 0; i--) {
+            Calendar c = Calendar.getInstance();
+            c.add(Calendar.DAY_OF_MONTH, -i);
+            dateList.add(sdf.format(c.getTime()));
+        }
+
+        // 鏌ヨ杩�7澶╄鍗�
+        Calendar startCal = Calendar.getInstance();
+        startCal.add(Calendar.DAY_OF_MONTH, -6);
+        startCal.set(Calendar.HOUR_OF_DAY, 0);
+        startCal.set(Calendar.MINUTE, 0);
+        startCal.set(Calendar.SECOND, 0);
+        startCal.set(Calendar.MILLISECOND, 0);
+
+        QueryWrapper<Orders> qw = new QueryWrapper<>();
+        qw.lambda()
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .eq(Orders::getAcceptDriver, driverId)
+                .in(Orders::getStatus,
+                        Constants.OrderStatus.accepted.getKey(),
+                        Constants.OrderStatus.delivering.getKey(),
+                        Constants.OrderStatus.arrived.getKey(),
+                        Constants.OrderStatus.finished.getKey())
+                .ge(Orders::getCreateTime, startCal.getTime());
+        List<Orders> orders = ordersMapper.selectList(qw);
+
+        // 鎸夋棩鏈熷垎缁勭粺璁�
+        Map<String, Long> countMap = orders.stream()
+                .collect(Collectors.groupingBy(o -> sdf.format(o.getCreateTime()), Collectors.counting()));
+
+        List<DriverOrderTrendVO> result = new ArrayList<>();
+        for (String date : dateList) {
+            DriverOrderTrendVO item = new DriverOrderTrendVO();
+            item.setDate(date);
+            item.setOrderCount(countMap.getOrDefault(date, 0L).intValue());
+            result.add(item);
+        }
+        return result;
+    }
+
+    @Override
+    public DriverRewardHallVO getDriverRewardHall(Integer driverId) {
+        // 鏌ヨ宸查鍙栭噾棰濓紙status=1锛�
+        QueryWrapper<RewardRecord> claimedQw = new QueryWrapper<>();
+        claimedQw.select("IFNULL(SUM(AMOUNT), 0) as amount")
+                .eq("DRIVER_ID", driverId)
+                .eq("STATUS", Constants.ONE)
+                .eq("DELETED", Constants.ZERO);
+        Map<String, Object> claimedResult = rewardRecordMapper.selectMaps(claimedQw).stream().findFirst().orElse(null);
+        long claimedAmount = claimedResult != null && claimedResult.get("amount") != null
+                ? Long.parseLong(claimedResult.get("amount").toString()) : 0L;
+
+        // 鏌ヨ寰呴鍙栭噾棰濓紙status=0锛�
+        QueryWrapper<RewardRecord> pendingQw = new QueryWrapper<>();
+        pendingQw.select("IFNULL(SUM(AMOUNT), 0) as amount")
+                .eq("DRIVER_ID", driverId)
+                .eq("STATUS", Constants.ZERO)
+                .eq("DELETED", Constants.ZERO);
+        Map<String, Object> pendingResult = rewardRecordMapper.selectMaps(pendingQw).stream().findFirst().orElse(null);
+        long pendingAmount = pendingResult != null && pendingResult.get("amount") != null
+                ? Long.parseLong(pendingResult.get("amount").toString()) : 0L;
+
+        // 璇诲彇濂栧姳瑙勫垯閰嶇疆
+        com.doumee.dao.dto.OperationConfigDTO config = operationConfigBiz.getConfig();
+
+        // 鏌ヨ濂栧姳璁板綍鍒楄〃锛堟寜涓婚敭銆佸垱寤烘椂闂村崌搴忥級
+        List<RewardRecord> records = rewardRecordMapper.selectList(new QueryWrapper<RewardRecord>().lambda()
+                .eq(RewardRecord::getDriverId, driverId)
+                .eq(RewardRecord::getDeleted, Constants.ZERO)
+                .orderByAsc(RewardRecord::getId)
+                .orderByAsc(RewardRecord::getCreateTime));
+
+        DriverRewardHallVO vo = new DriverRewardHallVO();
+        vo.setClaimedAmount(claimedAmount);
+        vo.setPendingAmount(pendingAmount);
+        vo.setRegisterRewardOrderCount(config.getRegisterRewardOrderCount());
+        vo.setRegisterRewardAmount(config.getRegisterRewardAmount());
+        vo.setPlatformRewardOrderCount(config.getPlatformRewardOrderCount());
+        vo.setPlatformRewardAmount(config.getPlatformRewardAmount());
+        vo.setRecords(records);
+        return vo;
+    }
+
+    @Override
+    public void claimReward(Integer driverId, Integer rewardRecordId) {
+        // 鏌ヨ濂栧姳璁板綍
+        RewardRecord record = rewardRecordMapper.selectById(rewardRecordId);
+        if (record == null || Constants.equalsInteger(record.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "濂栧姳璁板綍涓嶅瓨鍦�");
+        }
+        if (!Constants.equalsInteger(record.getDriverId(), driverId)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈棰嗗彇璇ュ鍔�");
+        }
+        if (!Constants.equalsInteger(record.getStatus(), Constants.ZERO)) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ュ鍔卞凡棰嗗彇");
+        }
+
+        Long rewardAmount = record.getAmount() != null ? record.getAmount() : 0L;
+        if (rewardAmount <= 0) return;
+
+        // 鏌ヨ鍙告満淇℃伅
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+
+        // 鍒涘缓鏀剁泭璁板綍锛坱ype=3 骞冲彴濂栧姳, optType=1 鏀跺叆, vaildStatus=1 宸插叆璐︼級
+        Revenue revenue = new Revenue();
+        revenue.setMemberId(driver.getMemberId());
+        revenue.setMemberType(Constants.ONE);
+        revenue.setType(Constants.THREE);      // 骞冲彴濂栧姳
+        revenue.setOptType(Constants.ONE);     // 鏀跺叆
+        revenue.setAmount(rewardAmount);
+        revenue.setVaildStatus(Constants.ONE); // 宸插叆璐�
+        revenue.setObjId(record.getOrderId());
+        revenue.setObjType(Constants.ZERO);
+        revenue.setStatus(Constants.ZERO);
+        revenue.setDeleted(Constants.ZERO);
+        revenue.setCreateTime(new Date());
+        revenueMapper.insert(revenue);
+
+        // 鏇存柊濂栧姳璁板綍锛歴tatus=1宸查鍙�, claimTime, revenueId
+        record.setStatus(Constants.ONE);
+        record.setClaimTime(new Date());
+        record.setRevenueId(revenue.getId());
+        record.setUpdateTime(new Date());
+        rewardRecordMapper.updateById(record);
+
+        // 鏇存柊鍙告満浣欓
+        driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
+                .setSql("BALANCE = IFNULL(BALANCE, 0) + " + rewardAmount)
+                .setSql("TOTAL_BALANCE = IFNULL(TOTAL_BALANCE, 0) + " + rewardAmount)
+                .eq(DriverInfo::getId, driverId));
+    }
+
 }

--
Gitblit v1.9.3