SpringAI整合DeepSeek生成图表

利用Spring-ai-openai集成DeepSeek

①、在DeepSeek开放平台创建API KEY





②、创建springboot项目,引入spring-ai-openai依赖,创建配置文件,配置deepseek的url和api key

③、具体的实现业务应用

java 复制代码
@RestController
public class ChatDeepSeekController{
	
	@Autowired
	private OpenAiChatModel chatModel;

	@GetMapping("/ai/test")
	public String generate(@RequestParam(value="message",defaultValue="hello")String message){
		
		String response = this.chatModel.call(message);
		System.out.println("response:" + response);
		return response;
	}
}

利用spring-ai-ollama访问本地化部署DeepSeek

①、利用DeepSeek本地化部署




②、通过ollama拉取DeepSeek模型

CMD窗口执行复制上面的命令

③、创建springboot工程引入依赖



④、业务应用

java 复制代码
@RestController
public class ChatDeepSeekController{
	
	@Autowired
	private OllamaChatModel ollamaChatModel;

	@GetMapping("/ai/test")
	public String generate(@RequestParam(value="message",defaultValue="hello")String message){
		
		String response = this.ollamaChatModel.call(message);
		System.out.println("response:" + response);
		return response;
	}
}

项目中应用实现数据报表

ECharts图表方式实现报表

①、前端使用工具ECharts

vue项目中安装ECharts:npm install echarts --save

vue组件中使用ECharts

html 复制代码
<template>
	<div ref="chart" style="width:600px;height:400px;"></div>
</template>

<script>
	import * as echarts from 'echarts';

	export default {
		data(){
			return {
				searchObj:{
					selectYear:''
				},
				btnDisabled:false,
				chart:null,
				title:'',
				xData:[],
				yData:[]
			}
		},
		created(){
				this.showChart()
		},
		method:{
			//初始化图表
			showChart(){
				getUserCount().then(response=>{
					this.yData = response.data.countList
					this.xData = response.data.dateList
					this.setChartData()
				})
			},
			
			setChartData(){
				var myChart = echarts.init(this.$refs.chart)
				var option = {
					title:{
						text:this.title + ''
					},
					tooltip:{}
					legend:{
						data:[this.title]
					},
					xAxis:{
						data:this.xData
					},
					yAxis:{
						minInterval:1
					},
					series:[{
						name:this.title,
						type:'bar',
						data:this.yData
					}]
				}
				//使用刚指定的配置项和数据显示图表
				myChart.setOption(option);
			},
		}
	}
</script>

②、后端创建查询统计数据的接口,按照ECharts要求格式返回

share-user模块

java 复制代码
@GetMapping("/getUserCount")
public R getUserCount(){

	Map<String,Object> map = userInfoService.getUserCount();
	return R.ok();
}
java 复制代码
@Override
public Map<String,Object> getUserCount(){
	
	Lit<UerCountVo> list = baseMapper.selectUserCount();
	
	Map<String,Object> map = new HashMap<>();
	
	//创建两个list集合,一个对应所有的日期,一个对应所有的数据
	//java中list -- json数组[]
	List<String> dateList = list.stream().map(UserCountVo::getRegisterDate).collect(Collectors.toList());
	
	List<Integer> countList = list.stream().map(UserCountVo::getCount).collect(Collectors.toList());
	
	map.put("dateList",dateList);
	map.put("countList",countList);
	return map;
}


SpringAI集成DeepSeek实现数据报表

  • AI生成sql语句

①、创建AI工程

依赖spring-ai-openai-spring-boot-starter

②、shart-order模块中

根据传递的sql查询数据库,得到报表

java 复制代码
@PostMapping("/getOrderCount")
public R getOrderCount(@RequestBody OrderSqlVo orderSqlVo){
	
	Map<String,Object> map = orderInfoService.getOrderCount(orderSqlVo.getSql());
	return R.ok(map);
}
java 复制代码
@Override
public Map<String,Object> getOrderCount(String sql){
	
	List<Map<String,Object>> list = baseMapper.getOrderCount(sql);
	Map<String,Object> dataMap = new HashMap<>();

	List<Object> dataList = new ArrayList<>();
	List<Object> countList = new ArrayList<>();

	for(Map<String,Object> map:list){
		
		dataList.add(map.get("order_date"));
		countList.add(map.get("order_count"));
	}

	dataMap.put("dateList",dateList);
	dataMap.put("countList",countList);
	return dataMap;
}
xml 复制代码
<select id="getOrderCount" resultType="hashmap">
	${sql}
</select>

③、远程定义模块(略)

④、shart-statics模块进行调用

java 复制代码
@Configuration
public class RestTmplateConfig{
	
	@Bean
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}
java 复制代码
@Autowired
private RestTemplate restTemplate;

@Autowired
private RemoteOrerInfoService remoteOrderInfoService;

@GetMapping("/orderData")
public AjaxResult getOrderData(@RequestParam(value="message",defaultValue="hello") String message){
	
	//通过restTemplate调用ai
	String sql = restTemplate.getForObject("http://localhost:8899/ai/generateSql?message=" + message,String.class);
	
	//远程调用
	OrderSqlVo orderSqlVo = new OrderSqlVo();
	orderSqlVo.setSql(sql);
	R<Map<String,Object>> result = remoteOrderInfoServce.getOrderCount(orderSqlVo);
	Map<String,Object> map = result.getData();
	return success(map);
}

整合前端

java 复制代码
export function getOrderCount(message){
	return request({
		url:'/sta/orderData?message=' + message,
		method:'get'
	})
}