/*
这是一个通用的Java控制器(Controller),用于处理一些常见的业务逻辑操作。以下是关于代码功能的简单解释:
1. **位置信息获取**: 通过`/location`接口接收经纬度参数,从配置中读取百度地图的API Key,通过BaiduUtil工具类获取对应的城市信息。
2. **人脸比对**: 通过`/matchFace`接口接收两个人脸图片,利用百度AI接口进行人脸比对。如果客户端尚未初始化,会从配置中读取API Key和SecretKey进行初始化。
3. **查询数据**: 如`/option/{tableName}/{columnName}`接口用于获取某个表中某列的数据联动选项。`/follow/{tableName}/{columnName}`接口是根据提供的列值和条件获取表中的数据。
4. **修改表状态**: `/sh/{tableName}`接口用于修改某个表的状态。
5. **提醒功能**: `/remind/{tableName}/{columnName}/{type}`接口用于获取需要提醒的记录数,根据传入的类型(数字或日期)和条件进行判断。
6. **图表统计**: `/group/{tableName}`接口用于进行图表统计。
7. **单列求和与分组统计**: 如`/cal/{tableName}/{columnName}`接口用于单列求和,而`/group/{tableName}/{columnName}`和`/value/{tableName}/{xColumnName}/{yColumnName}`则用于分组统计和按值统计。
8. **新加的查询功能**: 包括了查询字典表的分组求和、分组统计总条数、日期分组求和和日期分组统计等。这些功能是为了适应某些特定的业务需求而添加的。
9. **字段数值操作**: `/plus/{tableName}/{id}/{column}/{number}`和`/reduce/{tableName}/{id}/{column}/{number}`接口分别用于增加和减少字段的数值。而`/update/{tableName}/{id}/{column}/{value}`接口则是用于更新字段的值。
总的来说,这个控制器涵盖了多种常见的业务操作,包括位置信息获取、人脸比对、数据查询、数据统计、状态修改等。这些功能都是基于一些通用的业务需求设计的,因此可以称为一个通用控制器。
*/
package com.controller;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;
/**
* 通用接口
*/
@RestController
public class CommonController{
private static final Logger logger = LoggerFactory.getLogger(CommonController.class);
@Autowired
private CommonService commonService;
@Autowired
private ConfigService configService;
private static AipFace client = null;
private static String BAIDU_DITU_AK = null;
@RequestMapping("/location")
public R location(String lng,String lat) {
if(BAIDU_DITU_AK==null) {
BAIDU_DITU_AK = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "baidu_ditu_ak")).getValue();
if(BAIDU_DITU_AK==null) {
return R.error("请在配置管理中正确配置baidu_ditu_ak");
}
}
Map<String, String> map = BaiduUtil.getCityByLonLat(BAIDU_DITU_AK, lng, lat);
return R.ok().put("data", map);
}
/**
* 人脸比对
*
* @param face1 人脸1
* @param face2 人脸2
* @return
*/
@RequestMapping("/matchFace")
public R matchFace(String face1, String face2, HttpServletRequest request) {
if(client==null) {
/*String AppID = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "AppID")).getValue();*/
String APIKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "APIKey")).getValue();
String SecretKey = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "SecretKey")).getValue();
String token = BaiduUtil.getAuth(APIKey, SecretKey);
if(token==null) {
return R.error("请在配置管理中正确配置APIKey和SecretKey");
}
client = new AipFace(null, APIKey, SecretKey);
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
}
JSONObject res = null;
try {
File file1 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face1);
File file2 = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+face2);
String img1 = Base64Util.encode(FileUtil.FileToByte(file1));
String img2 = Base64Util.encode(FileUtil.FileToByte(file2));
MatchRequest req1 = new MatchRequest(img1, "BASE64");
MatchRequest req2 = new MatchRequest(img2, "BASE64");
ArrayList<MatchRequest> requests = new ArrayList<MatchRequest>();
requests.add(req1);
requests.add(req2);
res = client.match(requests);
System.out.println(res.get("result"));
} catch (FileNotFoundException e) {
e.printStackTrace();
return R.error("文件不存在");
} catch (IOException e) {
e.printStackTrace();
}
return R.ok().put("data", com.alibaba.fastjson.JSONObject.parse(res.get("result").toString()));
}
/**
* 获取table表中的column列表(联动接口)
* @return
*/
@RequestMapping("/option/{tableName}/{columnName}")
@IgnoreAuth
public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,String level,String parent) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
if(StringUtils.isNotBlank(level)) {
params.put("level", level);
}
if(StringUtils.isNotBlank(parent)) {
params.put("parent", parent);
}
List<String> data = commonService.getOption(params);
return R.ok().put("data", data);
}
/**
* 根据table中的column获取单条记录
* @return
*/
@RequestMapping("/follow/{tableName}/{columnName}")
@IgnoreAuth
public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
params.put("columnValue", columnValue);
Map<String, Object> result = commonService.getFollowByOption(params);
return R.ok().put("data", result);
}
/**
* 修改table表的sfsh状态
* @param map
* @return
*/
@RequestMapping("/sh/{tableName}")
public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
map.put("table", tableName);
commonService.sh(map);
return R.ok();
}
/**
* 获取需要提醒的记录数
* @param tableName
* @param columnName
* @param type 1:数字 2:日期
* @param map
* @return
*/
@RequestMapping("/remind/{tableName}/{columnName}/{type}")
@IgnoreAuth
public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,
@PathVariable("type") String type,@RequestParam Map<S
没有合适的资源?快使用搜索试试~ 我知道了~
(源码)基于Spring Boot框架的高校实验室信息化综合管理平台.zip

共952个文件
js:241个
png:162个
gif:141个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 79 浏览量
2025-06-11
06:59:00
上传
评论
收藏 10.77MB ZIP 举报
温馨提示
# 基于Spring Boot框架的高校实验室信息化综合管理平台 ## 项目简介 本项目是一个基于Spring Boot框架和MyBatis Plus构建的Java Web应用程序,为高校实验室提供信息化综合管理功能。涵盖用户管理、字典表管理、文件上传与下载、配置管理、新闻管理、设备管理等多个模块,并包含通用接口实现地理位置查询、人脸比对等功能。 ## 项目的主要特性和功能 1. 用户管理支持用户注册、登录、退出、密码重置、信息查看与更新,针对不同角色(实验室人员、校级人员、院级人员等)有相应管理功能。 2. 字典表管理实现字典表信息的分页查询、详情查询、保存、修改和删除。 3. 文件上传与下载可将文件上传至服务器upload目录,支持更新特定配置信息,同时提供文件下载功能。 4. 配置管理能对系统配置信息进行分页查询、详情查询、保存、修改和删除。 5. 新闻管理提供新闻信息的增删改查,包括分页查询、详情查询、保存、修改、删除以及前端展示功能。
资源推荐
资源详情
资源评论



























收起资源包目录





































































































共 952 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10
资源评论


Java咖啡师
- 粉丝: 1703
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于常用 CNN 神经网络实现超 30 万条手写数学符号识别
- (源码)基于PyTorch框架的深度学习图像处理与OCR系统.zip
- 计算理论与实践:ICTAC 2020会议精选
- (源码)基于Python的乐高NXT设备控制系统.zip
- (源码)基于Arduino平台的智能停车管理系统.zip
- (源码)基于Arduino的DIY电气安全组件项目.zip
- (源码)基于WebQQ和Python的运维监控报警系统.zip
- (源码)基于Go和Node.js的多模型聊天系统.zip
- 矿井建设工程网络计划技术研究.docx
- 计算机体系结构课后习题原版答案-张晨曦著.doc
- OPC技术的上位机与PLC之间的通信现代工业控制系统通常以PC机为上位机.doc
- 传媒业如何拥抱大数据.docx
- 第一章城市轨道交通信号设备.ppt
- (源码)基于Vitepress框架的前端学习笔记平台.zip
- 促进小学数学小组合作的深度学习策略.docx
- 计算机网络通信技术应用及发展研究.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
