Browse Source

1、后台管理系统首页增加统计

master
Aug 1 month ago
parent
commit
5efe756823
8 changed files with 685 additions and 127 deletions
  1. +2
    -0
      admin-hanhai-vue/package.json
  2. +6
    -0
      admin-hanhai-vue/src/api/exhibit.js
  3. +380
    -0
      admin-hanhai-vue/src/components/ExhibitDataBoard.vue
  4. +155
    -127
      admin-hanhai-vue/src/views/dashboard/Analysis.vue
  5. +7
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/assessmentController/ConfigController.java
  6. +3
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/ConfigService.java
  7. +121
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ConfigServiceImpl.java
  8. +11
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/utils/CommonUtils.java

+ 2
- 0
admin-hanhai-vue/package.json View File

@ -19,6 +19,7 @@
"china-area-data": "^5.0.1",
"clipboard": "^2.0.4",
"codemirror": "^5.46.0",
"countup.js": "^2.9.0",
"cron-parser": "^2.10.0",
"dayjs": "^1.8.0",
"dom-align": "1.12.0",
@ -33,6 +34,7 @@
"viser-vue": "^2.4.8",
"vue": "^2.6.10",
"vue-area-linkage": "^5.1.0",
"vue-countup-v2": "^4.0.0",
"vue-cropper": "^0.5.4",
"vue-i18n": "^8.7.0",
"vue-loader": "^15.7.0",


+ 6
- 0
admin-hanhai-vue/src/api/exhibit.js View File

@ -0,0 +1,6 @@
import { getAction } from '@/api/manage'
// 展品相关API接口
// 配置-数量统计
export const queryCount = (params) => getAction("/assessment/config/queryCount", params);

+ 380
- 0
admin-hanhai-vue/src/components/ExhibitDataBoard.vue View File

@ -0,0 +1,380 @@
<template>
<div class="exhibit-data-board">
<div class="data-cards">
<a-card class="data-card" :class="item.cardClass" v-for="(item, index) in dataItems" :key="index">
<div class="card-content">
<div class="icon-wrapper">
<a-icon :type="item.icon" class="data-icon" />
</div>
<div class="data-info">
<div class="data-title">{{ item.title }}</div>
<div class="data-value">
<ICountUp
:endVal="item.value"
:options="countUpOptions"
@ready="onReady"
/>
</div>
<div class="data-unit" v-if="item.unit">{{ item.unit }}</div>
</div>
</div>
<div class="card-footer" v-if="item.description">
<span class="description">{{ item.description }}</span>
</div>
</a-card>
</div>
<!-- 统计率数据行 -->
<div class="rate-cards" style="margin-top: 24px;">
<a-card class="rate-card" :class="item.cardClass" v-for="(item, index) in rateItems" :key="index">
<div class="rate-content">
<div class="rate-icon">
<a-icon :type="item.icon" />
</div>
<div class="rate-info">
<div class="rate-title">{{ item.title }}</div>
<div class="rate-value">
<ICountUp
:endVal="item.value"
:options="rateCountUpOptions"
@ready="onReady"
/>
<span class="rate-symbol">%</span>
</div>
</div>
<!-- <div class="rate-trend" :class="item.trend">-->
<!-- <a-icon :type="item.trend === 'up' ? 'arrow-up' : 'arrow-down'" />-->
<!-- <span>{{ item.trendValue }}%</span>-->
<!-- </div>-->
</div>
</a-card>
</div>
<!-- 维修保养统计 -->
<div class="maintenance-cards" style="margin-top: 24px;">
<a-card class="maintenance-card" v-for="(item, index) in maintenanceItems" :key="index">
<div class="maintenance-content">
<div class="maintenance-header">
<a-icon :type="item.icon" class="maintenance-icon" />
<span class="maintenance-title">{{ item.title }}</span>
</div>
<div class="maintenance-value">
<ICountUp
:endVal="item.value"
:options="rateCountUpOptions"
@ready="onReady"
/>
</div>
<div class="maintenance-footer">
<span class="maintenance-desc">{{ item.description }}</span>
</div>
</div>
</a-card>
</div>
</div>
</template>
<script>
import ICountUp from 'vue-countup-v2'
import { queryCount } from '@/api/exhibit'
export default {
name: 'ExhibitDataBoard',
components: {
ICountUp
},
data() {
return {
countUpOptions: {
useEasing: true,
useGrouping: true,
separator: ',',
decimal: '.',
duration: 2.5
},
rateCountUpOptions: {
useEasing: true,
useGrouping: false,
decimal: '.',
decimalPlaces: 2,
duration: 2.5
},
dataItems: [],
rateItems: [],
maintenanceItems: []
}
},
mounted() {
this.loadStatisticsData()
},
methods: {
onReady(instance, CountUp) {
// CountUp
},
async loadStatisticsData() {
try {
const response = await queryCount()
if (response.success) {
const data = response.result
this.dataItems = data.dataItems || []
this.rateItems = data.rateItems || []
this.maintenanceItems = data.maintenanceItems || []
} else {
this.$message.error('获取统计数据失败:' + response.message)
}
} catch (error) {
console.error('获取统计数据失败:', error)
this.$message.error('获取统计数据失败')
}
}
}
}
</script>
<style scoped>
.exhibit-data-board {
padding: 24px;
background: #f5f5f5;
min-height: 100vh;
}
.data-cards {
display: flex;
flex-wrap: wrap;
gap: 24px;
margin-bottom: 16px;
}
.data-cards .data-card {
flex: 1;
min-width: 250px;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
margin-bottom: 16px;
}
.data-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}
.card-content {
display: flex;
align-items: center;
padding: 8px 0;
}
.icon-wrapper {
margin-right: 16px;
}
.data-icon {
font-size: 36px;
color: #1890ff;
}
.primary-card .data-icon {
color: #1890ff;
}
.warning-card .data-icon {
color: #faad14;
}
.danger-card .data-icon {
color: #f5222d;
}
.info-card .data-icon {
color: #722ed1;
}
.data-info {
flex: 1;
}
.data-title {
font-size: 14px;
color: #666;
margin-bottom: 4px;
}
.data-value {
font-size: 28px;
font-weight: bold;
color: #262626;
line-height: 1;
}
.data-unit {
font-size: 12px;
color: #999;
margin-top: 4px;
}
.card-footer {
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid #f0f0f0;
}
.description {
font-size: 12px;
color: #999;
}
/* 统计率卡片样式 */
.rate-cards {
display: flex;
flex-wrap: wrap;
gap: 24px;
margin-bottom: 16px;
}
.rate-cards .rate-card {
flex: 1;
min-width: 280px;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
margin-bottom: 16px;
}
.rate-card:hover {
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.12);
}
.rate-content {
display: flex;
align-items: center;
justify-content: space-between;
}
.rate-icon {
font-size: 24px;
margin-right: 12px;
}
.success-rate .rate-icon {
color: #52c41a;
}
.warning-rate .rate-icon {
color: #faad14;
}
.danger-rate .rate-icon {
color: #f5222d;
}
.rate-info {
flex: 1;
}
.rate-title {
font-size: 14px;
color: #666;
margin-bottom: 4px;
}
.rate-value {
font-size: 24px;
font-weight: bold;
color: #262626;
}
.rate-symbol {
font-size: 16px;
margin-left: 2px;
}
.rate-trend {
display: flex;
flex-direction: column;
align-items: center;
font-size: 12px;
}
.rate-trend.up {
color: #52c41a;
}
.rate-trend.down {
color: #f5222d;
}
/* 维修保养卡片样式 */
.maintenance-cards {
display: flex;
flex-wrap: wrap;
gap: 24px;
margin-bottom: 16px;
}
.maintenance-cards .maintenance-card {
flex: 1;
min-width: 200px;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.maintenance-card:hover {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.maintenance-content {
text-align: center;
}
.maintenance-header {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 12px;
}
.maintenance-icon {
font-size: 20px;
color: #1890ff;
margin-right: 8px;
}
.maintenance-title {
font-size: 14px;
color: #666;
}
.maintenance-value {
font-size: 32px;
font-weight: bold;
color: #262626;
margin-bottom: 8px;
}
.maintenance-footer {
font-size: 12px;
color: #999;
}
/* 响应式设计 */
@media (max-width: 768px) {
.exhibit-data-board {
padding: 16px;
}
.data-value {
font-size: 24px;
}
.rate-value {
font-size: 20px;
}
.maintenance-value {
font-size: 28px;
}
}
</style>

+ 155
- 127
admin-hanhai-vue/src/views/dashboard/Analysis.vue View File

@ -1,116 +1,109 @@
<template>
<div class="analysis-page">
<!-- 展品数据统计看板 -->
<ExhibitDataBoard />
<div>
<!-- <div class="background-card">-->
<!-- 原有的统计功能保留但注释可根据需要启用 -->
<!--
<div class="background-card">
<a-input v-model="sql" @blur="enter" :readonly="true" placeholder="考虑到统计过于耗费性能,您可以通过点击指定块实时刷新数据!"></a-input>
<!-- <a-input v-model="sql" @blur="enter" :readonly="true" placeholder="考虑到统计过于耗费性能,您可以通过点击指定块实时刷新数据!"></a-input>-->
<div class="grid-line">
<a-card style="width: 560px; min-height: 400px; height: auto; margin: 20px;" title="兼职发布情况" :bordered="false" @click="clickCard3">
<a-table :dataSource="clickDataSource3" :columns="clickDolumns3" :pagination="false" />
</a-card>
<!-- <div class="grid-line">-->
<div style="width: 1080px; display: flex; flex-wrap: wrap;">
<a-card class="mini-div" title="兼职点击统计" :bordered="false" @click="clickCard1">
<a-table :dataSource="clickDataSource" :columns="clickDolumns" :pagination="false" />
</a-card>
<!-- <a-card style="width: 560px; min-height: 400px; height: auto; margin: 20px;" title="兼职发布情况" :bordered="false" @click="clickCard3">-->
<a-card class="mini-div" title="联系方式点击统计" :bordered="false" @click="clickCard2">
<a-table :dataSource="clickDataSource2" :columns="clickDolumns2" :pagination="false" />
</a-card>
<!-- <a-table :dataSource="clickDataSource3" :columns="clickDolumns3" :pagination="false" />-->
<a-card class="mini-div" title="用户统计" :bordered="false" @click="clickCard0">
<a-row>
<a-col :span="8">
<a-statistic title="总用户/实名" :value="cmap.zs" >
<template #suffix>
<span>/ {{cmap.ps}}</span>
</template>
</a-statistic>
</a-col>
<a-col :span="8">
<a-statistic title="今日" :value="cmap.za" >
<template #suffix>
<span>/ {{cmap.pa}}</span>
</template>
</a-statistic>
</a-col>
<a-col :span="8">
<a-statistic title="昨日" :value="cmap.zd" >
<template #suffix>
<span>/ {{cmap.pd}}</span>
</template>
</a-statistic>
</a-col>
</a-row>
<!-- </a-card>-->
<a-row style="margin-top: 40px;">
<a-col :span="8">
<a-statistic title="本周" :value="cmap.zb" >
<template #suffix>
<span>/ {{cmap.pb}}</span>
</template>
</a-statistic>
</a-col>
<a-col :span="8">
<a-statistic title="本月" :value="cmap.zc" >
<template #suffix>
<span>/ {{cmap.pc}}</span>
</template>
</a-statistic>
</a-col>
</a-row>
</a-card>
<!-- <div style="width: 1080px; display: flex; flex-wrap: wrap;">-->
<a-card class="mini-div" title="公众号概要" :bordered="false" @click="clickCard9">
<a-row>
<a-col :span="8">
<a-statistic title="双端总用户" :value="cmbp.a" />
</a-col>
<a-col :span="8">
<a-statistic title="平台用户" :value="cmbp.b" />
</a-col>
<a-col :span="8">
<a-statistic title="关注公众号" :value="cmbp.c" />
</a-col>
</a-row>
<!-- <a-card class="mini-div" title="兼职点击统计" :bordered="false" @click="clickCard1">-->
<!-- <a-table :dataSource="clickDataSource" :columns="clickDolumns" :pagination="false" />-->
<!-- </a-card>-->
<!-- <a-card class="mini-div" title="联系方式点击统计" :bordered="false" @click="clickCard2">-->
<!-- <a-table :dataSource="clickDataSource2" :columns="clickDolumns2" :pagination="false" />-->
<!-- </a-card>-->
<!-- <a-card class="mini-div" title="用户统计" :bordered="false" @click="clickCard0">-->
<!-- <a-row>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="总用户/实名" :value="cmap.zs" >-->
<!-- <template #suffix>-->
<!-- <span>/ {{cmap.ps}}</span>-->
<!-- </template>-->
<!-- </a-statistic>-->
<!-- </a-col>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="今日" :value="cmap.za" >-->
<!-- <template #suffix>-->
<!-- <span>/ {{cmap.pa}}</span>-->
<!-- </template>-->
<!-- </a-statistic>-->
<!-- </a-col>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="昨日" :value="cmap.zd" >-->
<!-- <template #suffix>-->
<!-- <span>/ {{cmap.pd}}</span>-->
<!-- </template>-->
<!-- </a-statistic>-->
<!-- </a-col>-->
<!-- </a-row>-->
<!-- <a-row style="margin-top: 40px;">-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="本周" :value="cmap.zb" >-->
<!-- <template #suffix>-->
<!-- <span>/ {{cmap.pb}}</span>-->
<!-- </template>-->
<!-- </a-statistic>-->
<!-- </a-col>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="本月" :value="cmap.zc" >-->
<!-- <template #suffix>-->
<!-- <span>/ {{cmap.pc}}</span>-->
<!-- </template>-->
<!-- </a-statistic>-->
<!-- </a-col>-->
<!-- </a-row>-->
<!-- </a-card>-->
<!-- <a-card class="mini-div" title="公众号概要" :bordered="false" @click="clickCard9">-->
<!-- <a-row>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="双端总用户" :value="cmbp.a" />-->
<!-- </a-col>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="平台用户" :value="cmbp.b" />-->
<!-- </a-col>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="关注公众号" :value="cmbp.c" />-->
<!-- </a-col>-->
<!-- </a-row>-->
<!-- <a-row style="margin-top: 40px;">-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="未转公众号" :value="cmbp.d" />-->
<!-- </a-col>-->
<!-- <a-col :span="8">-->
<!-- <a-statistic title="未转小程序" :value="cmbp.e" />-->
<!-- </a-col>-->
<!-- </a-row>-->
<!-- </a-card>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<a-row style="margin-top: 40px;">
<a-col :span="8">
<a-statistic title="未转公众号" :value="cmbp.d" />
</a-col>
<a-col :span="8">
<a-statistic title="未转小程序" :value="cmbp.e" />
</a-col>
</a-row>
</a-card>
</div>
</div>
</div>
-->
</div>
</template>
<script>
import { postAction, getAction } from '@/api/manage'
import CryptoJS from 'crypto-js';
import { postAction, getAction } from '@/api/manage'
import CryptoJS from 'crypto-js'
import ExhibitDataBoard from '@/components/ExhibitDataBoard.vue'
export default {
name: "Analysis",
components: {
ExhibitDataBoard
},
data() {
return {
sql: '',
@ -256,37 +249,72 @@ import CryptoJS from 'crypto-js';
}
},
created() {
this.clickCard0()
this.clickCard1()
this.clickCard2()
this.clickCard3()
this.clickCard9()
// 使ExhibitDataBoard
// this.clickCard0()
// this.clickCard1()
// this.clickCard2()
// this.clickCard3()
// this.clickCard9()
},
methods: {
//
clickCard0() {
//
},
clickCard1() {
//
},
clickCard2() {
//
},
clickCard3() {
//
},
clickCard9() {
//
},
enter() {
//
}
}
}
</script>
<style>
.background-card{
width: 100%; min-height: 780px; height: auto; text-align: right; margin-top: 20px;background-color: #FFF
}
.grid-line {
width: 100%;
min-height: 780px;
height: auto;
text-align: center;
color: blue;
box-sizing: border-box;
background: -webkit-linear-gradient(top, transparent 15px, #eee 0), -webkit-linear-gradient(left, transparent 15px, #eee 0);
background-size: 16px 16px;
position: relative;
display: flex;
flex-wrap: wrap;
}
.mini-div {
width: 480px;
min-height: 400px;
height: auto;
margin: 20px;
}
<style scoped>
.analysis-page {
min-height: 100vh;
background-color: #f5f5f5;
padding: 24px;
}
/* 保留原有样式以备后用 */
.background-card {
width: 100%;
min-height: 780px;
height: auto;
text-align: right;
margin-top: 20px;
background-color: #FFF;
}
.grid-line {
width: 100%;
min-height: 780px;
height: auto;
text-align: center;
color: blue;
box-sizing: border-box;
background: -webkit-linear-gradient(top, transparent 15px, #eee 0), -webkit-linear-gradient(left, transparent 15px, #eee 0);
background-size: 16px 16px;
position: relative;
display: flex;
flex-wrap: wrap;
}
.mini-div {
width: 480px;
min-height: 400px;
height: auto;
margin: 20px;
}
</style>

+ 7
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/assessmentController/ConfigController.java View File

@ -55,4 +55,11 @@ public class ConfigController {
return configService.generateCode(assessmentCode.getNum(), assessmentCode.getDiscountAmount());
}
//数量统计接口
@ApiOperation(value="配置-数量统计", notes="配置-数量统计")
@RequestMapping(value = "/queryCount", method = {RequestMethod.GET})
public Result<?> queryCount(){
return configService.queryCount();
}
}

+ 3
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/ConfigService.java View File

@ -24,4 +24,7 @@ public interface ConfigService {
//系统配置-生成兑换码
public Result<?> generateCode(int num, BigDecimal discountAmount);
//数量统计接口
public Result<?> queryCount();
}

+ 121
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/service/impl/ConfigServiceImpl.java View File

@ -8,18 +8,27 @@ import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.api.bean.PageBean;
import org.jeecg.modules.api.service.ConfigService;
import org.jeecg.modules.api.utils.CommonUtils;
import org.jeecg.modules.assessmentBanner.entity.AssessmentBanner;
import org.jeecg.modules.assessmentBanner.service.IAssessmentBannerService;
import org.jeecg.modules.assessmentCode.entity.AssessmentCode;
import org.jeecg.modules.assessmentCode.service.IAssessmentCodeService;
import org.jeecg.modules.assessmentConfig.entity.AssessmentConfig;
import org.jeecg.modules.assessmentConfig.service.IAssessmentConfigService;
import org.jeecg.modules.assessmentPayLog.entity.AssessmentPayLog;
import org.jeecg.modules.assessmentPayLog.service.IAssessmentPayLogService;
import org.jeecg.modules.assessmentReportUser.service.IAssessmentReportUserService;
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember;
import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
@ -35,6 +44,15 @@ public class ConfigServiceImpl implements ConfigService {
//兑换码信息
@Resource
private IAssessmentCodeService assessmentCodeService;
//用户信息
@Resource
private IHanHaiMemberService hanHaiMemberService;
//测评报告信息
@Resource
private IAssessmentReportUserService assessmentReportUserService;
//支付记录信息
@Resource
private IAssessmentPayLogService assessmentPayLogService;
/******************************************************************************************************************/
//首页-查询banner图列表
@ -179,4 +197,107 @@ public class ConfigServiceImpl implements ConfigService {
}
@Override
public Result<?> queryCount() {
log.info("开始查询统计信息");
//返回信息
String massege = "";
Map<String, Object> result = new HashMap<>();
//https://1x.antdv.com/components/icon-cn/#components-icon-demo-basic 图标库地址
try{
//总用户数
long userNum = hanHaiMemberService.count();
//今日新增用户数
String today = CommonUtils.getTime("yyyy-MM-dd");
long todayNum = hanHaiMemberService.lambdaQuery().like(HanHaiMember::getCreateTime, today).count();
//本月新增用户数
String month = CommonUtils.getTime("yyyy-MM");
long monthNum = hanHaiMemberService.lambdaQuery().like(HanHaiMember::getCreateTime, month).count();
//获取报告总次数
long reportNum = assessmentReportUserService.count();
//总流水金额
List<AssessmentPayLog> amount = assessmentPayLogService.list();
BigDecimal amountSum = BigDecimal.ZERO;
for (AssessmentPayLog assessmentPayLog : amount) {
amountSum = amountSum.add(assessmentPayLog.getPayAmount());
}
amountSum.setScale(2, RoundingMode.DOWN);//保留两位小数向0方向舍入截断
// 第一行基础数据统计
List<Map<String, Object>> dataItems = new ArrayList<>();
Map<String, Object> item1 = new HashMap<>();
item1.put("title", "用户数");
item1.put("value", userNum);
item1.put("icon", "user");
item1.put("cardClass", "primary-card");
item1.put("description", "总用户数");
dataItems.add(item1);
Map<String, Object> item2 = new HashMap<>();
item2.put("title", "今日新增");
item2.put("value", todayNum);
item2.put("icon", "user-add");
item2.put("cardClass", "warning-card");
item2.put("description", "今日新增注册用户数");
dataItems.add(item2);
Map<String, Object> item3 = new HashMap<>();
item3.put("title", "本月新增");
item3.put("value", monthNum);
item3.put("icon", "usergroup-add");
item3.put("cardClass", "danger-card");
item3.put("description", "本月新增注册用户数");
dataItems.add(item3);
// 第二行统计率数据
List<Map<String, Object>> rateItems = new ArrayList<>();
// //完好率
// double undamaged = showpieceNum > 0 ? (showpieceNum - repairingNum) * 1.0 / showpieceNum : 0;
// double undamagedRate = undamaged * 100;
//
// Map<String, Object> rate1 = new HashMap<>();
// rate1.put("title", "完好率");
// rate1.put("value", Double.parseDouble(String.format("%.1f", undamagedRate)));
// rate1.put("icon", "check-circle");
// rate1.put("cardClass", "success-rate");
// // rate1.put("trend", "up");
// // rate1.put("trendValue", 2.3);
// rateItems.add(rate1);
// 第三行维修保养统计
List<Map<String, Object>> maintenanceItems = new ArrayList<>();
Map<String, Object> maintenance1 = new HashMap<>();
maintenance1.put("title", "获取报告次数");
maintenance1.put("value", reportNum);
maintenance1.put("icon", "file-text");
maintenance1.put("description", "总获取报告次数");
maintenanceItems.add(maintenance1);
Map<String, Object> maintenance2 = new HashMap<>();
maintenance2.put("title", "总流水");
maintenance2.put("value", amountSum);
maintenance2.put("icon", "transaction");
maintenance2.put("description", "总流水金额");
maintenanceItems.add(maintenance2);
result.put("dataItems", dataItems);
result.put("rateItems", rateItems);
result.put("maintenanceItems", maintenanceItems);
log.info("统计信息查询结束");
return Result.OK("统计信息", result);
}catch (Exception e){
log.error("统计信息查询失败");
e.printStackTrace();
return Result.error("统计信息查询失败");
}
}
}

+ 11
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/utils/CommonUtils.java View File

@ -38,6 +38,17 @@ public class CommonUtils {
return newTime;
}
//获取当前日期
public static String getTime(String format){
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date now = new Date();
String formattedDate = sdf.format(now);
// System.out.println(now); // 输出格式化后的当前时间
// System.out.println(formattedDate); // 输出格式化后的当前时间
return formattedDate;
}
public static void main(String[] args) {
System.out.println(getValidTime(getCurrentTime(), 3));
}


Loading…
Cancel
Save