|
@@ -72,7 +72,7 @@ public class IncomeManageServiceImpl extends ServiceImpl<StoreIncomeDetailsRecor
|
|
|
log.debug("IncomeManageServiceImpl.getPaymentCycle - 未到账期: date={}", jsonObject.get("date"));
|
|
log.debug("IncomeManageServiceImpl.getPaymentCycle - 未到账期: date={}", jsonObject.get("date"));
|
|
|
} else if (paymentType != null && paymentType == 1) {
|
|
} else if (paymentType != null && paymentType == 1) {
|
|
|
// 已到账期: 已绑定提现记录 & 当前时间-4~27天大于创建时间
|
|
// 已到账期: 已绑定提现记录 & 当前时间-4~27天大于创建时间
|
|
|
- wrapper.isNotNull("sidr.cash_out_id");
|
|
|
|
|
|
|
+// wrapper.isNotNull("sidr.cash_out_id");
|
|
|
wrapper.between("sidr.created_time", DateUtils.calcDays(new Date(), -27), DateUtils.calcDays(new Date(), -4));
|
|
wrapper.between("sidr.created_time", DateUtils.calcDays(new Date(), -27), DateUtils.calcDays(new Date(), -4));
|
|
|
Date startDate = DateUtils.calcDays(now, -27);
|
|
Date startDate = DateUtils.calcDays(now, -27);
|
|
|
Date endDate = DateUtils.calcDays(now, -4);
|
|
Date endDate = DateUtils.calcDays(now, -4);
|
|
@@ -636,5 +636,370 @@ public class IncomeManageServiceImpl extends ServiceImpl<StoreIncomeDetailsRecor
|
|
|
throw new RuntimeException("快速提现失败:" + e.getMessage(), e);
|
|
throw new RuntimeException("快速提现失败:" + e.getMessage(), e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 已入账/未入账详情查询
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeId 门店ID
|
|
|
|
|
+ * @param incomeType 收入类型, 0:主页, 1:优惠券, 2:代金券, 3:套餐, 4:联名卡
|
|
|
|
|
+ * @param paymentType 账期类型,0:未入账,1:已入账
|
|
|
|
|
+ * @param startTime 开始时间
|
|
|
|
|
+ * @param endTime 结束时间
|
|
|
|
|
+ * @param page 页数
|
|
|
|
|
+ * @param size 条数
|
|
|
|
|
+ * @return 入账详情
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public com.alibaba.fastjson2.JSONObject getPaymentDetails(Integer storeId, Integer incomeType, Integer paymentType,
|
|
|
|
|
+ String startTime, String endTime, int page, int size) {
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getPaymentDetails - 查询入账详情: storeId={}, incomeType={}, paymentType={}, startTime={}, endTime={}, page={}, size={}",
|
|
|
|
|
+ storeId, incomeType, paymentType, startTime, endTime, page, size);
|
|
|
|
|
+
|
|
|
|
|
+ QueryWrapper<StoreIncomeDetailsRecord> wrapper = new QueryWrapper<>();
|
|
|
|
|
+ com.alibaba.fastjson2.JSONObject result = new com.alibaba.fastjson2.JSONObject();
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
+
|
|
|
|
|
+ // 根据 paymentType 设置时间范围和条件
|
|
|
|
|
+ if (paymentType == 0) {
|
|
|
|
|
+ // 未入账: 当前时间-3天内的记录
|
|
|
|
|
+ wrapper.isNull("sidr.cash_out_id");
|
|
|
|
|
+ wrapper.gt("sidr.created_time", DateUtils.calcDays(new Date(), -3));
|
|
|
|
|
+ Date startDate = DateUtils.calcDays(now, -3);
|
|
|
|
|
+ result.put("date", df.format(startDate) + " ~ " + df.format(now));
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getPaymentDetails - 未入账时间范围: {} ~ {}", df.format(startDate), df.format(now));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 已入账: 当前时间-4~27天的记录
|
|
|
|
|
+ wrapper.between("sidr.created_time", DateUtils.calcDays(new Date(), -27), DateUtils.calcDays(new Date(), -4));
|
|
|
|
|
+ Date startDate = DateUtils.calcDays(now, -27);
|
|
|
|
|
+ Date endDate = DateUtils.calcDays(now, -4);
|
|
|
|
|
+ result.put("date", df.format(startDate) + " ~ " + df.format(endDate));
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getPaymentDetails - 已入账时间范围: {} ~ {}", df.format(startDate), df.format(endDate));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 店铺ID条件
|
|
|
|
|
+ if (storeId != null) {
|
|
|
|
|
+ wrapper.eq("sidr.store_id", storeId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 自定义时间范围(用户输入的时间范围)
|
|
|
|
|
+ LocalDate startDate = LocalDate.parse(startTime);
|
|
|
|
|
+ LocalDate endDate = LocalDate.parse(endTime);
|
|
|
|
|
+ LocalDateTime startOfDay = startDate.atStartOfDay();
|
|
|
|
|
+ LocalDateTime endOfDay = endDate.atTime(LocalTime.MAX);
|
|
|
|
|
+ wrapper.between("sidr.created_time", startOfDay, endOfDay)
|
|
|
|
|
+ .orderByDesc("sidr.created_time");
|
|
|
|
|
+
|
|
|
|
|
+ // 收入类型条件
|
|
|
|
|
+ if (null != incomeType) {
|
|
|
|
|
+ if (0 == incomeType) {
|
|
|
|
|
+ // 主页: 包含优惠券和团购券
|
|
|
|
|
+ wrapper.in("sidr.income_type", CouponTypeEnum.COUPON.getCode(), CouponTypeEnum.GROUP_BUY.getCode());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ wrapper.eq("sidr.income_type", incomeType);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 查询收入明细列表
|
|
|
|
|
+ List<StoreIncomeDetailsRecordVo> list = storeIncomeDetailsRecordMapper.selectRecordList(wrapper);
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getPaymentDetails - 查询到记录数: {}", list.size());
|
|
|
|
|
+
|
|
|
|
|
+ // 查询店铺信息
|
|
|
|
|
+ StoreInfo storeInfo = storeInfoMapper.selectById(storeId);
|
|
|
|
|
+
|
|
|
|
|
+ // 处理每条记录的数据格式
|
|
|
|
|
+ for (StoreIncomeDetailsRecordVo record : list) {
|
|
|
|
|
+ // 空值检查
|
|
|
|
|
+ if (record == null) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ StoreIncomeDetailsRecordVo vo = new StoreIncomeDetailsRecordVo();
|
|
|
|
|
+ BeanUtils.copyProperties(record, vo);
|
|
|
|
|
+
|
|
|
|
|
+ // 转换金额格式(分转元,保留2位小数)
|
|
|
|
|
+ record.setMoneyStr(new BigDecimal(vo.getMoney())
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
|
|
+
|
|
|
|
|
+ // 设置日期
|
|
|
|
|
+ String format = df.format(record.getCreatedTime());
|
|
|
|
|
+ record.setDate(format);
|
|
|
|
|
+
|
|
|
|
|
+ // 设置抽成比例
|
|
|
|
|
+ record.setCommissionRate(storeInfo.getCommissionRate());
|
|
|
|
|
+
|
|
|
|
|
+ // 计算售价(收益 + 手续费)
|
|
|
|
|
+ record.setIncomeMoney(new BigDecimal(vo.getMoney())
|
|
|
|
|
+ .add(new BigDecimal(vo.getCommission()))
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
|
|
+
|
|
|
|
|
+ // 设置手续费
|
|
|
|
|
+ record.setCommissionStr(new BigDecimal(vo.getCommission())
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).toString());
|
|
|
|
|
+
|
|
|
|
|
+ vo.setCommissionRate(storeInfo.getCommissionRate());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 分页处理
|
|
|
|
|
+ result.put("data", ListToPage.setPage(list, page, size));
|
|
|
|
|
+
|
|
|
|
|
+ // 计算总金额(元)
|
|
|
|
|
+ BigDecimal totalMoney = new BigDecimal(list.stream()
|
|
|
|
|
+ .mapToInt(StoreIncomeDetailsRecord::getMoney)
|
|
|
|
|
+ .sum())
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
|
|
+ result.put("money", totalMoney.toString());
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getPaymentDetails - 查询完成: 总金额={}元, 记录数={}",
|
|
|
|
|
+ totalMoney, list.size());
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 收入汇总统计
|
|
|
|
|
+ * 整合四项关键数据:可提现金额、今日收益、已入账、未入账
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeId 门店ID
|
|
|
|
|
+ * @return 收入汇总统计数据
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Map<String, Object> getIncomeSummary(Integer storeId) {
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getIncomeSummary - 开始查询收入汇总: storeId={}", storeId);
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ // ==================== 1. 账户余额 & 可提现金额 ====================
|
|
|
|
|
+ calculateAccountBalance(storeId, result);
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 2. 今日收益 ====================
|
|
|
|
|
+ calculateTodayIncome(storeId, result);
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 3. 未入账统计(近3天) ====================
|
|
|
|
|
+ calculateNotPaidIncome(storeId, result);
|
|
|
|
|
+
|
|
|
|
|
+ // ==================== 4. 已入账统计(4-27天) ====================
|
|
|
|
|
+ calculatePaidIncome(storeId, result);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.getIncomeSummary - 查询完成: result={}", result);
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("IncomeManageServiceImpl.getIncomeSummary - 查询失败: storeId={}, error={}",
|
|
|
|
|
+ storeId, e.getMessage(), e);
|
|
|
|
|
+ throw new RuntimeException("查询收入汇总失败:" + e.getMessage(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 计算账户余额和可提现金额
|
|
|
|
|
+ *
|
|
|
|
|
+ * 业务逻辑:
|
|
|
|
|
+ * 1. 账户余额 = 用户账户中的总余额(store_user.money)
|
|
|
|
|
+ * 2. 可提现金额 = 4-27天内未绑定提现的收入 - 待审核/已通过的提现金额
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeId 门店ID
|
|
|
|
|
+ * @param result 结果集
|
|
|
|
|
+ */
|
|
|
|
|
+ private void calculateAccountBalance(Integer storeId, Map<String, Object> result) {
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateAccountBalance - 开始计算账户余额和可提现金额");
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 1.1 查询账户总余额 ----------
|
|
|
|
|
+ LambdaQueryWrapper<StoreUser> userWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ userWrapper.eq(StoreUser::getStoreId, storeId);
|
|
|
|
|
+ StoreUser storeUser = storeUserMapper.selectOne(userWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ if (storeUser == null) {
|
|
|
|
|
+ log.warn("IncomeManageServiceImpl.calculateAccountBalance - 未找到店铺用户: storeId={}", storeId);
|
|
|
|
|
+ result.put("balance", "0.00");
|
|
|
|
|
+ result.put("cashOutMoney", "0.00");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 账户总余额(分转元)
|
|
|
|
|
+ String balance = new BigDecimal(storeUser.getMoney())
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
|
|
|
|
|
+ .toString();
|
|
|
|
|
+ result.put("balance", balance);
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateAccountBalance - 账户余额: {}元", balance);
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 1.2 查询4-27天内未绑定提现的收入 ----------
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ Date startDate = DateUtils.calcDays(now, -27); // 27天前
|
|
|
|
|
+ Date endDate = DateUtils.calcDays(now, -4); // 4天前
|
|
|
|
|
+
|
|
|
|
|
+ LambdaQueryWrapper<StoreIncomeDetailsRecord> incomeWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ incomeWrapper.between(StoreIncomeDetailsRecord::getCreatedTime, startDate, endDate)
|
|
|
|
|
+ .isNull(StoreIncomeDetailsRecord::getCashOutId) // 未绑定提现记录
|
|
|
|
|
+ .eq(StoreIncomeDetailsRecord::getStoreId, storeId);
|
|
|
|
|
+
|
|
|
|
|
+ List<StoreIncomeDetailsRecord> incomeList = this.list(incomeWrapper);
|
|
|
|
|
+ int availableIncome = incomeList.stream()
|
|
|
|
|
+ .mapToInt(StoreIncomeDetailsRecord::getMoney)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateAccountBalance - 4-27天内可提现收入: {}分, 记录数: {}",
|
|
|
|
|
+ availableIncome, incomeList.size());
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 1.3 查询待审核和已通过的提现金额 ----------
|
|
|
|
|
+ QueryWrapper<StoreCashOutRecord> cashOutWrapper = new QueryWrapper<>();
|
|
|
|
|
+ cashOutWrapper.eq("store_id", storeId)
|
|
|
|
|
+ .in("payment_status", "1", "3") // 1-待审核, 3-已通过
|
|
|
|
|
+ .eq("delete_flag", "0");
|
|
|
|
|
+
|
|
|
|
|
+ List<StoreCashOutRecord> cashOutRecords = storeCashOutRecordMapper.selectList(cashOutWrapper);
|
|
|
|
|
+ int pendingCashOut = cashOutRecords.stream()
|
|
|
|
|
+ .collect(Collectors.summingInt(StoreCashOutRecord::getMoney));
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateAccountBalance - 待审核/已通过提现: {}分, 记录数: {}",
|
|
|
|
|
+ pendingCashOut, cashOutRecords.size());
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 1.4 计算可提现金额 ----------
|
|
|
|
|
+ // 可提现金额 = 可提现收入 - 审核中的提现
|
|
|
|
|
+ int cashOutMoney = availableIncome - pendingCashOut;
|
|
|
|
|
+ String cashOutMoneyStr = new BigDecimal(Math.max(cashOutMoney, 0)) // 确保不为负数
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
|
|
|
|
|
+ .toString();
|
|
|
|
|
+ result.put("cashOutMoney", cashOutMoneyStr);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateAccountBalance - 可提现金额: {}元", cashOutMoneyStr);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 计算今日收益
|
|
|
|
|
+ *
|
|
|
|
|
+ * 业务逻辑:
|
|
|
|
|
+ * 统计当天00:00:00 ~ 23:59:59所有收入的总和
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeId 门店ID
|
|
|
|
|
+ * @param result 结果集
|
|
|
|
|
+ */
|
|
|
|
|
+ private void calculateTodayIncome(Integer storeId, Map<String, Object> result) {
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateTodayIncome - 开始计算今日收益");
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 2.1 获取今天的日期范围 ----------
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
+ String today = df.format(now);
|
|
|
|
|
+ String startTime = today + " 00:00:00";
|
|
|
|
|
+ String endTime = today + " 23:59:59";
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 2.2 查询今天的收入记录 ----------
|
|
|
|
|
+ LambdaQueryWrapper<StoreIncomeDetailsRecord> todayWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ todayWrapper.between(StoreIncomeDetailsRecord::getCreatedTime, startTime, endTime)
|
|
|
|
|
+ .eq(StoreIncomeDetailsRecord::getStoreId, storeId);
|
|
|
|
|
+
|
|
|
|
|
+ List<StoreIncomeDetailsRecord> todayList = this.list(todayWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 2.3 汇总今日收益 ----------
|
|
|
|
|
+ int todayIncome = todayList.stream()
|
|
|
|
|
+ .mapToInt(StoreIncomeDetailsRecord::getMoney)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ String todayIncomeStr = new BigDecimal(todayIncome)
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
|
|
|
|
|
+ .toString();
|
|
|
|
|
+ result.put("todayIncome", todayIncomeStr);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateTodayIncome - 今日收益: {}元, 记录数: {}",
|
|
|
|
|
+ todayIncomeStr, todayList.size());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 计算未入账统计(近3天)
|
|
|
|
|
+ *
|
|
|
|
|
+ * 业务逻辑:
|
|
|
|
|
+ * 1. 时间范围:当前时间 - 3天 ~ 当前时间
|
|
|
|
|
+ * 2. 条件:未绑定提现记录(cash_out_id IS NULL)
|
|
|
|
|
+ * 3. 说明:这部分收入还未到提现账期,不能提现
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeId 门店ID
|
|
|
|
|
+ * @param result 结果集
|
|
|
|
|
+ */
|
|
|
|
|
+ private void calculateNotPaidIncome(Integer storeId, Map<String, Object> result) {
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateNotPaidIncome - 开始计算未入账统计");
|
|
|
|
|
+
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 3.1 计算时间范围 ----------
|
|
|
|
|
+ Date notPaidStartDate = DateUtils.calcDays(now, -3); // 3天前
|
|
|
|
|
+ String notPaidDateRange = df.format(notPaidStartDate) + " ~ " + df.format(now);
|
|
|
|
|
+ result.put("notPaidDateRange", notPaidDateRange);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateNotPaidIncome - 未入账时间范围: {}", notPaidDateRange);
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 3.2 查询未入账收入(近3天,未绑定提现) ----------
|
|
|
|
|
+ QueryWrapper<StoreIncomeDetailsRecord> notPaidWrapper = new QueryWrapper<>();
|
|
|
|
|
+ notPaidWrapper.isNull("sidr.cash_out_id") // 未绑定提现记录
|
|
|
|
|
+ .gt("sidr.created_time", notPaidStartDate) // 大于3天前
|
|
|
|
|
+ .eq("sidr.store_id", storeId);
|
|
|
|
|
+
|
|
|
|
|
+ List<StoreIncomeDetailsRecordVo> notPaidList = storeIncomeDetailsRecordMapper.selectRecordList(notPaidWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 3.3 汇总未入账金额和数量 ----------
|
|
|
|
|
+ int notPaidMoney = notPaidList.stream()
|
|
|
|
|
+ .mapToInt(StoreIncomeDetailsRecord::getMoney)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ String notPaidMoneyStr = new BigDecimal(notPaidMoney)
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
|
|
|
|
|
+ .toString();
|
|
|
|
|
+
|
|
|
|
|
+ result.put("notPaidMoney", notPaidMoneyStr);
|
|
|
|
|
+ result.put("notPaidCount", notPaidList.size());
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculateNotPaidIncome - 未入账: {}元, 记录数: {}",
|
|
|
|
|
+ notPaidMoneyStr, notPaidList.size());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 计算已入账统计(4-27天)
|
|
|
|
|
+ *
|
|
|
|
|
+ * 业务逻辑:
|
|
|
|
|
+ * 1. 时间范围:当前时间 - 27天 ~ 当前时间 - 4天
|
|
|
|
|
+ * 2. 说明:这部分收入已到提现账期,可以申请提现
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param storeId 门店ID
|
|
|
|
|
+ * @param result 结果集
|
|
|
|
|
+ */
|
|
|
|
|
+ private void calculatePaidIncome(Integer storeId, Map<String, Object> result) {
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculatePaidIncome - 开始计算已入账统计");
|
|
|
|
|
+
|
|
|
|
|
+ Date now = new Date();
|
|
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 4.1 计算时间范围 ----------
|
|
|
|
|
+ Date paidStartDate = DateUtils.calcDays(now, -27); // 27天前
|
|
|
|
|
+ Date paidEndDate = DateUtils.calcDays(now, -4); // 4天前
|
|
|
|
|
+ String paidDateRange = df.format(paidStartDate) + " ~ " + df.format(paidEndDate);
|
|
|
|
|
+ result.put("paidDateRange", paidDateRange);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculatePaidIncome - 已入账时间范围: {}", paidDateRange);
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 4.2 查询已入账收入(4-27天前) ----------
|
|
|
|
|
+ QueryWrapper<StoreIncomeDetailsRecord> paidWrapper = new QueryWrapper<>();
|
|
|
|
|
+ paidWrapper.between("sidr.created_time", paidStartDate, paidEndDate)
|
|
|
|
|
+ .eq("sidr.store_id", storeId);
|
|
|
|
|
+
|
|
|
|
|
+ List<StoreIncomeDetailsRecordVo> paidList = storeIncomeDetailsRecordMapper.selectRecordList(paidWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // ---------- 4.3 汇总已入账金额和数量 ----------
|
|
|
|
|
+ int paidMoney = paidList.stream()
|
|
|
|
|
+ .mapToInt(StoreIncomeDetailsRecord::getMoney)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ String paidMoneyStr = new BigDecimal(paidMoney)
|
|
|
|
|
+ .divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)
|
|
|
|
|
+ .toString();
|
|
|
|
|
+
|
|
|
|
|
+ result.put("paidMoney", paidMoneyStr);
|
|
|
|
|
+ result.put("paidCount", paidList.size());
|
|
|
|
|
+
|
|
|
|
|
+ log.info("IncomeManageServiceImpl.calculatePaidIncome - 已入账: {}元, 记录数: {}",
|
|
|
|
|
+ paidMoneyStr, paidList.size());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|