# chartscp
**Repository Path**: duanyashu/chartscp
## Basic Information
- **Project Name**: chartscp
- **Description**: 图表折线图的好伴侣,快速生成数据,解决折线图数据问题
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2021-01-21
- **Last Updated**: 2025-06-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# echarts折线图数据生成的搭档chartscp
这个工具可以通过指定参数生成带日期时间的图表,柱状图的初始数据,配合sql实现展示数据

maven仓库坐标
com.github.duanyashu
chartscp
1.1.4
----
### 使用方式
public ChartscpResult getUserByOneWeek() {
//创建对象
ChartscpResult chartscpResult = ChartscpUtils.newBuilder().setCalendarField(Calendar.DATE).build();
//执行sql查询数据
List list = userMapper.selectUserByOneWeek(chartscpResult);
//数据更新
chartscpResult.updateData(list);
return chartscpResult;
}
查询sql 示例
### 说明文档
ChartscpResult build = ChartscpUtils.newBuilder(ChartscpUtils.HOUR).setStartTime("2021-01-18 00:00:00").setEndTime("2021-01-18 23:59:59").setLength(7).setInterval(8).setDataNonzero(true).setXCellFormat("HH时").build();
参数说明:
newBuilder(ChartscpUtils.HOUR)是指定显示x轴格式,年(YEAR),月(MONTH),日(DATE),小时(HOUR),分钟(MINUTE),周(WEEK),整周(DAY_WHOLE_WEEK),整小时(MINUTE_WHOLE_HOUR),整天(HOUR_WHOLE_DAY),整月(DAY_WHOLE_MONTH),整年(MONTH_WHOLE_YEAR),季度(QUARTER), 必填
setLength() 这个方法用来指定显示的长度 默认是7
eg: Builder(ChartscpUtils.YEAR).setLength(3) 是显示最近3年 xCells=[2019,2020,2021] )
setStartTime() 和 setEndTime() 是指定日期范围, 指定了日期范围 setLength 失效
setInterval() 是指定日期步长 默认是1,如果设置为 0 代表日期不需要连续,按数据库查询显示。
(eg:Builder(Calendar.YEAR).setLength(3).setInterval(2) 显示最近6年每两年作为一个单位 xCells=[2017,2019,2021])
setDataNonzero(true) 这个方法用来设置 当数据为0,是否显示前一个值(eg: 显示价格变化) 默认是 false
setXCellFormat("HH时") 这个方法用来自定义显示的xCell日期格式 不设置显示默认格式
build() 方法生成结果对象ChartscpResult 如果需要多个datas,可以通过自定义继承ChartscpResult,在build(扩展类)中传入实现。
eg:扩展类
public class Kz extends ChartscpResult {
private List datas1;
public List getDatas1() {
return datas1;
}
public void setDatas1(List datas1) {
this.datas1 = datas1;
}
}
引入使用
Kz kz = ChartscpUtils.newBuilder(Calendar.DATE).build(Kz.class);
### 常用示例
eg : 默认查询7条数据 通过setLength指定 默认数据间隔1 通过setInterval指定
* 年为单位 最近3年
*/
ChartscpResult yearResult = ChartscpUtils.newBuilder(ChartscpUtils.YEAR).setLength(3).build();


/**
* 月为单位 最近5月
*/
ChartscpResult monthResult = ChartscpUtils.newBuilder(ChartscpUtils.MONTH).setXCellFormat("yy-M").setLength(5).build();
/**
* 日为单位 最近7日
*/
ChartscpResult dateResult = ChartscpUtils.newBuilder(ChartscpUtils.DATE).setLength(7).build();
/**
* 小时为单位 最近7小时
*/
ChartscpResult hourResult = ChartscpUtils.newBuilder(ChartscpUtils.HOUR).build();
/**
* 分钟为单位 最近7分钟
*/
ChartscpResult minuteResult = ChartscpUtils.newBuilder(ChartscpUtils.MINUTE).build();
/**
* 日为单位 间隔2日统计 3个日单位 (eg: xells={1 3 5}))
*/
ChartscpResult dateIntervalResult = ChartscpUtils.newBuilder(ChartscpUtils.DATE).setLength(3).setInterval(2).build();
/**
* 最近7天非连续数据 间隔为0 只生成开始结束日期,数据直接获取数据库
*/
ChartscpResult dateInterval0Result = ChartscpUtils.newBuilder(Calendar.DATE).setInterval(0).build();
List list1 = new ArrayList<>();
ChartscpResultMap chartscpResultMap = new ChartscpResultMap();
chartscpResultMap.setXcell("01-18");
chartscpResultMap.setData(1);
list1.add(chartscpResultMap);
ChartscpResultMap chartscpResultMap1 = new ChartscpResultMap();
chartscpResultMap1.setXcell("01-23");
chartscpResultMap1.setData(4);
list1.add(chartscpResultMap1);
dateInterval0Result.updateData(list1);
/**
* 加开始 ,结束时间 指定日期的数据
*/
ChartscpResult seResult = ChartscpUtils.newBuilder(ChartscpUtils.HOUR).setStartTime("2021-01-18 00:00:00").setEndTime("2021-01-18 23:59:59").build();
/**
* 自定义 显示格式
*/
ChartscpResult customXCellFormat = ChartscpUtils.newBuilder(ChartscpUtils.HOUR).setXCellFormat("H点m分").setLength(3).build();
/**
* 自定义扩展类实现字段扩展
*/
Kz kz = ChartscpUtils.newBuilder(ChartscpUtils.DATE).build(Kz.class);
//模拟数据库数据 ChartscpResultMapKz和Kz类字段对应 datas1
List list = new ArrayList<>();
ChartscpResultMapKz sqKz = new ChartscpResultMapKz();
sqKz.setXcell("01-22");
sqKz.setData(1);
sqKz.setDatas1(3);
list.add(sqKz);
ChartscpResultMapKz sqKz1 = new ChartscpResultMapKz();
sqKz1.setXcell("01-24");
sqKz1.setData(4);
sqKz1.setDatas1(8);
list.add(sqKz1);
//更新数据
kz.updateData(list);
/**
* 按分钟显示整小时
*/
ChartscpResult minute_whole_hour = ChartscpUtils.newBuilder(MINUTE_WHOLE_HOUR).setDataNonzero(true).setInterval(8).build();
/**
* 按分钟显示整小时 ,当前分钟没有数据保持前一分钟数据
*/
ChartscpResult minute_whole_hour1 = ChartscpUtils.newBuilder(MINUTE_WHOLE_HOUR).setDataNonzero(true).setEndTime("2021-01-25 08:09:23").build();
//模拟数据库数据 ChartscpResultMapKz和Kz类字段对应 datas1
List list3 = new ArrayList<>();
ChartscpResultMap crm1 = new ChartscpResultMap();
crm1.setXcell("11:12");
crm1.setData(1);
list3.add(crm1);
//更新数据
minute_whole_hour1.updateData(list3);
/**
* 按小时显示整天 三班倒
*/
ChartscpResult hour_whole_day = ChartscpUtils.newBuilder(ChartscpUtils.HOUR_WHOLE_DAY).setInterval(8).setDataNonzero(true).build();
/**
* 按天显示整月
*/
ChartscpResult day_whole_month = ChartscpUtils.newBuilder(ChartscpUtils.DAY_WHOLE_MONTH).build();
/**
* 按月显示整年
*/
ChartscpResult month_whole_year = ChartscpUtils.newBuilder(ChartscpUtils.MONTH_WHOLE_YEAR).build();
/**
* 显示当前周数据 如果有多个分类数据,可以通过扩展ChartscpResult和ChartscpResultMap实现
*/
ChartscpResult week = ChartscpUtils.newBuilder(ChartscpUtils.WEEK).setXCellFormat("周%s").setDataNonzero(true).build();
//模拟数据库数据 ChartscpResultMapKz和Kz类字段对应 datas1
List list2 = new ArrayList<>();
ChartscpResultMap crm = new ChartscpResultMap();
crm.setXcell("01-27");
crm.setData(1);
list2.add(crm);
//更新数据
week.updateData(list2);

/**
* 显示以周为单位的数据 默认显示最近4周
*/
ChartscpResult week = ChartscpUtils.newBuilder(ChartscpUtils.WEEK).build();

/**
* 显示季度数据
*/
ChartscpResult chartscpResult = ChartscpUtils.newBuilder(ChartscpUtils.QUARTER).setXCellFormat("第%s个季度").setLength(2).build();
//模拟数据库数据 ChartscpResultMapKz和Kz类字段对应 datas1
List list4 = new ArrayList<>();
ChartscpResultMap crm11 = new ChartscpResultMap();
crm11.setXcell("01");
crm11.setData(4);
list4.add(crm11);
ChartscpResultMap crm111 = new ChartscpResultMap();
crm111.setXcell("03");
crm111.setData(2);
list4.add(crm111);
chartscpResult.updateData(list4);

针对下边这种带分类的统计可以通过带条件分类(广告收入等)进行多次查询 然后合并数据方式

public Map quarter() {
List legend = Arrays.asList("上季度","本季度");
List