feat(home): 优化首页界面并实现收入统计功能
- 添加欢迎区域背景动效和视觉优化 - 实现今日收入统计及同比数据显示 - 重构待办事项和日程的双栏布局 - 修复路由权限检查并添加无权限提示 - 更新快捷功能入口和统计卡片样式 - 集成财务模块收入查询接口 - 添加数据库配置备份文件
This commit is contained in:
@@ -39,6 +39,16 @@ public class HomeStatisticsDto {
|
||||
* 相对前日变化百分比
|
||||
*/
|
||||
private Double revenueTrend;
|
||||
|
||||
/**
|
||||
* 今日收入金额(数值,单位:元)
|
||||
*/
|
||||
private java.math.BigDecimal todayRevenueAmount;
|
||||
|
||||
/**
|
||||
* 昨日收入金额(数值,单位:元)
|
||||
*/
|
||||
private java.math.BigDecimal yesterdayRevenueAmount;
|
||||
|
||||
/**
|
||||
* 今日预约数量
|
||||
|
||||
@@ -13,7 +13,14 @@ import com.openhis.administration.service.IPatientService;
|
||||
import com.openhis.administration.service.IPractitionerService;
|
||||
import com.openhis.common.enums.ParticipantType;
|
||||
import com.openhis.web.dto.HomeStatisticsDto;
|
||||
import com.openhis.financial.domain.PaymentReconciliation;
|
||||
import com.openhis.financial.service.IPaymentReconciliationService;
|
||||
import com.openhis.common.enums.PaymentStatus;
|
||||
import com.openhis.web.service.IHomeStatisticsService;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import com.openhis.web.patientmanage.mapper.PatientManageMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -46,6 +53,9 @@ public class HomeStatisticsServiceImpl implements IHomeStatisticsService {
|
||||
@Autowired
|
||||
private IPatientService patientService;
|
||||
|
||||
@Autowired
|
||||
private IPaymentReconciliationService paymentReconciliationService;
|
||||
|
||||
/**
|
||||
* 获取首页统计数据
|
||||
*
|
||||
@@ -105,10 +115,17 @@ public class HomeStatisticsServiceImpl implements IHomeStatisticsService {
|
||||
double patientTrend = calculateTrend(totalPatients, yesterdayPatients);
|
||||
statistics.setPatientTrend(patientTrend);
|
||||
|
||||
// 今日收入和预约等其他统计(暂时设为0,后续从相应表查询)
|
||||
statistics.setTodayRevenue("¥ 0");
|
||||
statistics.setYesterdayRevenue("¥ 0");
|
||||
statistics.setRevenueTrend(0.0);
|
||||
// 查询今日收入
|
||||
BigDecimal todayRevenue = queryRevenueByDate(new Date());
|
||||
BigDecimal yesterdayRevenue = queryRevenueByDate(getYesterday());
|
||||
java.text.DecimalFormat df = new java.text.DecimalFormat("#,##0.00");
|
||||
statistics.setTodayRevenue("¥ " + df.format(todayRevenue));
|
||||
statistics.setYesterdayRevenue("¥ " + df.format(yesterdayRevenue));
|
||||
statistics.setTodayRevenueAmount(todayRevenue);
|
||||
statistics.setYesterdayRevenueAmount(yesterdayRevenue);
|
||||
statistics.setRevenueTrend(calculateTrend(todayRevenue.doubleValue(), yesterdayRevenue.doubleValue()));
|
||||
|
||||
// 今日预约和待审核(暂时设为0,后续实现)
|
||||
statistics.setTodayAppointments(0);
|
||||
statistics.setYesterdayAppointments(0);
|
||||
statistics.setAppointmentTrend(0.0);
|
||||
@@ -117,6 +134,49 @@ public class HomeStatisticsServiceImpl implements IHomeStatisticsService {
|
||||
return statistics;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询指定日期的收款总额(状态为支付成功且未全部退款)
|
||||
*
|
||||
* @param date 日期
|
||||
* @return 收款总额
|
||||
*/
|
||||
private BigDecimal queryRevenueByDate(Date date) {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(date);
|
||||
cal.set(Calendar.HOUR_OF_DAY, 0);
|
||||
cal.set(Calendar.MINUTE, 0);
|
||||
cal.set(Calendar.SECOND, 0);
|
||||
cal.set(Calendar.MILLISECOND, 0);
|
||||
Date dayStart = cal.getTime();
|
||||
|
||||
cal.add(Calendar.DAY_OF_MONTH, 1);
|
||||
Date dayEnd = cal.getTime();
|
||||
|
||||
LambdaQueryWrapper<PaymentReconciliation> query = new LambdaQueryWrapper<>();
|
||||
query.ge(PaymentReconciliation::getBillDate, dayStart)
|
||||
.lt(PaymentReconciliation::getBillDate, dayEnd)
|
||||
.eq(PaymentReconciliation::getStatusEnum, PaymentStatus.SUCCESS.getValue())
|
||||
.eq(PaymentReconciliation::getDeleteFlag, "0")
|
||||
.select(PaymentReconciliation::getDisplayAmount);
|
||||
|
||||
java.util.List<PaymentReconciliation> list = paymentReconciliationService.list(query);
|
||||
if (list == null || list.isEmpty()) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
return list.stream()
|
||||
.map(p -> p.getDisplayAmount() != null ? p.getDisplayAmount() : BigDecimal.ZERO)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取昨天的日期
|
||||
*/
|
||||
private Date getYesterday() {
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.add(Calendar.DAY_OF_MONTH, -1);
|
||||
return cal.getTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算相对前日的百分比变化
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user