前言:由于最近做的一个物联网项目,需要通过传感器等进行监控,而传感器的的数据是通过mqtt进行上报的。传感器数量多且状态有改变就会发布数据提供订阅,因此数据量也较大,用传统的关系型数据库存储数据不实际,而且业务中不存在大量复杂的事务逻辑操作,可以避开事务机制(回滚)。综合考虑,使用mongodb进行传感器数据的存储。
1.导入maven包:
<!--mongodb-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
2.新建DO实体类:
import com.xuxueli.poi.excel.annotation.ExcelField;
import com.xuxueli.poi.excel.annotation.ExcelSheet;
import lombok.Data;
import org.apache.poi.hssf.util.HSSFColor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
/**
* @author huangquanguang
* @date 2020/2/21 10:22
* @description
* 精密空调实体类
*/
@Document(collection = "air_condition")
@Data
@ExcelSheet(name = "精密空调", headColor = HSSFColor.HSSFColorPredefined.LIGHT_GREEN)
public class AirConditionDO implements Serializable {
//pid供mongodb内部使用
@Id
private String id;
//设备id
private String deviceId;
//设备类型
private Integer typeId;
//上报数据
private String payload;
//主题名称
private String topic;
//信号类型id
private String signalId;
//区域
@ExcelField(name = "区域",width = 80)
private String areaName;
//区域具体位置
private String areaDetail;
//信号类型名称
@ExcelField(name = "监控项",width = 160)
private String signalName;
//监控值
@ExcelField(name = "监控值",width = 80)
private Double signalValue;
//创建时间
@ExcelField(name = "采集时间",width = 160)
private String createTime;
//位置标识
private String areaMark;
public AirConditionDO() {
}
public AirConditionDO(String deviceId, String createTime, String payload,String topic,
Integer typeId,String signalId,String signalName,Double signalValue,
String areaName,String areaDetail,String areaMark) {
this.deviceId = deviceId;
this.createTime = createTime;
this.payload = payload;
this.topic = topic;
this.typeId = typeId;
this.signalId = signalId;
this.signalName = signalName;
this.signalValue = signalValue;
this.areaName = areaName;
this.areaDetail = areaDetail;
this.areaMark = areaMark;
}
@Override
public String toString() {
return "AirCondition [id=" + id + ", deviceId=" + deviceId + "+ topic="+topic+", createTime=" + createTime + ", payload=" + payload + "]";
}
}
3.业务逻辑处理类
AirConditionService:
import com.cecjx.common.utils.PageUtils;
import com.cecjx.common.utils.Query;
import com.cecjx.rotaryring.domain.AirConditionDO;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public interface AirConditionService {
PageUtils getPageList(Map<String, Object> params) throws ParseException;
Map realTempHum(Integer areaType);
List<Map> getTempByDate(Integer areaType, String date,Integer reportType);
List<Map> getHumByDate(Integer areaType, String date,Integer reportType);
List<AirConditionDO> listAll(Map<String, Object> params);
}
AirConditionServiceImpl(这里的业务处理包括了分页、分组统计、求平均值、聚合查询等的例子):
import com.alibaba.fastjson.JSON;
import com.cecjx.common.config.Constant;
import com.cecjx.common.utils.PageUtils;
import com.cecjx.common.utils.RedisUtil;
import com.cecjx.device.domain.WarnLogDO;
import com.cecjx.monitor.warn.domain.WarnParamDO;
import com.cecjx.rotaryring.dao.AirConditionDao;
import com.cecjx.rotaryring.domain.AirConditionDO;
import com.cecjx.rotaryring.service.AirConditionService;
import com.github.pagehelper.util.StringUtil;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.*;
/**
* 精密空调逻辑处理
*
* @author huangquanguang
* @create 2019/12/24 15:47
*/
@Service("airConditionServiceImpl")
public class AirConditionServiceImpl implements AirConditionService {
@Autowired
private MongoTemplate mongoTemplate;
private AirConditionDao airConditionDao;
@Autowired
public AirConditionServiceImpl(AirConditionDao airConditionDao) {
this.airConditionDao = airConditionDao;
}
/**
* @author huangquanguang
* @date 2020/3/19 16:36
* @description 查询精密空调历史数据
*
*/
@Override
public PageUtils getPageList(Map<String, Object> params) throws ParseException {
//mp分页 start | --分页插件--自动识别DB
int pageSize = Integer.parseInt((String) params.getOrDefault("pageSize", 10));
int pageNumber = Integer.parseInt((String) params.getOrDefault("pageNumber", 1));
String sort = (String) params.get("sort");
String areaName = (String) params.get("areaName");
String signalName = (String) params.get("signalName");
String[] signalIds = new String[]{Constant.SIGNAL_AIR_TEMP, Constant.SIGNAL_AIR_HUM};
if (!StringUtil.isEmpty(signalName) && signalName.equals("温度")) {
signalIds = new String[]{Constant.SIGNAL_AIR_TEMP};
} else if (!StringUtil.isEmpty(signalName) && signalName.equals("湿度")) {
signalIds = new String[]{Constant.SIGNAL_AIR_HUM};
}
//监控范围
Double signalValueMin = null;
Double signalValueMax = null;
if ("" != params.get("signalValueMin") && params.get("signalValueMin") != null) {
signalValueMin = Double.parseDouble(params.get("signalValueMin").toString());
}
if ("" != params.get("signalValueMax") && params.get("signalValueMax") != null) {
signalValueMax = Double.parseDouble(params.get("signalValueMax").toString());
}
//时间范围
String startTime = (String) params.get("startTime");
String endTime = (String) params.get("endTime");
//默认的排序是ASC升序
PageRequest pr = PageRequest.of(pageNumber - 1, pageSize, Direction.ASC, "id");
if ("desc".equals(sort)) {
pr = PageRequest.of(pageNumber - 1, pageSize, Direction.DESC, "id");
}
Page<AirConditionDO> pictureDOPage = airConditionDao.findByColumnContaining(signalIds, signalValueMin, signalValueMax, startTime, endTime, areaName, pr);
return new PageUtils(pictureDOPage.getContent(), pictureDOPage.getTotalElements());
}
/**
* @author huangquanguang
* @date 2020/3/18 9:30
* @description 根据区域(一办、二办)查询实时的温度、湿度
*/
@Override
public Map realTempHum(Integer areaType) {
Map map = new HashMap();
String areaName = null;
if (areaType == 1) {
areaName = "一办";
} else {
areaName = "二办";
}
//回风温度信号id
String signalId = Constant.SIGNAL_AIR_TEMP;
Double temp = getResultByMongodb(areaName, signalId);
//回风湿度信号id
String signalHumId = Constant.SIGNAL_AIR_HUM;
Double hum = getResultByMongodb(areaName, signalHumId);
map.put("temp", temp);
map.put("hum", hum);
//实时的温度湿度与系统设置的预警参数作比较,返回提示
//预警参数缓存查询
String tempWarn = "0";
String humWarn = "0";
RedisUtil redisUtil = new RedisUtil();
List<WarnParamDO> warnParamDOS = JSON.parseArray(redisUtil.getObject("warnParams").toString(), WarnParamDO.class);
if (warnParamDOS != null && warnParamDOS.size() > 0) {
for(WarnParamDO warnParamDO : warnParamDOS){
Double cracMinTemp = Double.parseDouble(warnParamDO.getCracMinTemp());
Double cracMaxTemp = Double.parseDouble(warnParamDO.getCracMaxTemp());
if (temp > cracMaxTemp || temp<cracMinTemp) {
tempWarn = "1";
}
Double cracMinHum = Double.parseDouble(warnParamDO.getCracMinHumidity());
Double cracMaxHum = Double.parseDouble(warnParamDO.getCracMaxHumidity());
if (hum > cracMaxHum || hum<cracMinHum) {
humWarn = "1";
}
}
}
map.put("tempWarn", tempWarn);
map.put("humWarn", humWarn);
return map;
}
/**
* @author huangquanguang
* @date 2020/3/18 15:16
* @description 查询某个区域某天或某月或某年的温度变化
*/
@Override
public List<Map> getTempByDate(Integer areaType, String date, Integer reportType) {
//回风温度信号id
String signalId = Constant.SIGNAL_AIR_TEMP;
List<Map> list = getAvgGroupList(areaType, date, signalId, reportType);
return list;
}
/**
* @author huangquanguang
* @date 2020/3/18 15:16
* @description 查询某个区域某天或某月或某年的湿度变化
*/
@Override
public List<Map> getHumByDate(Integer areaType, String date, Integer reportType) {
//回风湿度信号id
String signalId = Constant.SIGNAL_AIR_HUM;
List<Map> list = getAvgGroupList(areaType, date, signalId, reportType);
return list;
}
/**
* @author huangquanguang
* @date 2020/3/26 16:11
* @description 导出符合查询条件的空调数据
*/
@Override
public List<AirConditionDO> listAll(Map<String, Object> params) {
// 列表查询
String signalName = (String) params.get("signalName");
String areaName = (String) params.get("areaName");
String[] signalIds = new String[]{Constant.SIGNAL_AIR_TEMP, Constant.SIGNAL_AIR_HUM};
if (!StringUtil.isEmpty(signalName) && signalName.equals("温度")) {
signalIds = new String[]{Constant.SIGNAL_AIR_TEMP};
} else if (!StringUtil.isEmpty(signalName) && signalName.equals("湿度")) {
signalIds = new String[]{Constant.SIGNAL_AIR_HUM};
}
//监控范围
Double signalValueMin = null;
Double signalValueMax = null;
if ("" != params.get("signalValueMin") && params.get("signalValueMin") != null) {
signalValueMin = Double.parseDouble(params.get("signalValueMin").toString());
}
if ("" != params.get("signalValueMax") && params.get("signalValueMax") != null) {
signalValueMax = Double.parseDouble(params.get("signalValueMax").toString());
}
//时间范围
String startTime = (String) params.get("startTime");
String endTime = (String) params.get("endTime");
return airConditionDao.findByColumnContaining(signalIds, signalValueMin, signalValueMax, startTime, endTime, areaName, new Sort(Sort.Direction.DESC, "id"));
}
/**
* @author huangquanguang
* @date 2020/3/19 10:56
* @description 计算某一天各个时段的温度湿度平均值,根据不同的报表类型拼接统计语句
*/
private List<Map> getAvgGroupList(Integer areaType, String date, String signalId, Integer reportType) {
List<Map> listResult = new ArrayList<>();
String areaName = null;
if (areaType == 1) {
areaName = "一办";
} else {
areaName = "二办";
}
MongoCollection collection = mongoTemplate.getCollection("air_condition");//air_condition为表
String matchStr = "{\"$match\":{\"areaName\":\"" + areaName + "\",\"signalId\":\"" + signalId + "\"}}";
String projectStr = "";
String matchDayStr = "";
//日报表
if (reportType == 0) {
projectStr = "{\"$project\":{\"_id\":0,\"payload\":1,\"signalValue\":1,\"deviceId\":1,\"day\":{\"$substr\":[\"$createTime\",0,10]},\"hour\":{\"$substr\":[\"$createTime\",11,2]}}}";
matchDayStr = "{\"$match\":{\"day\":\"" + date + "\"}}";
}
//月报表
if (reportType == 1) {
date = date.substring(0, 7);
projectStr = "{\"$project\":{\"_id\":0,\"payload\":1,\"signalValue\":1,\"deviceId\":1,\"day\":{\"$substr\":[\"$createTime\",0,7]},\"hour\":{\"$substr\":[\"$createTime\",8,2]}}}";
matchDayStr = "{\"$match\":{\"day\":\"" + date + "\"}}";
}
//年报表
if (reportType == 2) {
date = date.substring(0, 4);
projectStr = "{\"$project\":{\"_id\":0,\"payload\":1,\"signalValue\":1,\"deviceId\":1,\"day\":{\"$substr\":[\"$createTime\",0,4]},\"hour\":{\"$substr\":[\"$createTime\",5,2]}}}";
matchDayStr = "{\"$match\":{\"day\":\"" + date + "\"}}";
}
String unwindStr = "{\"$unwind\":\"$payload\"}";
String groupStr = "{\"$group\":{\"_id\":{\"hour\":\"$hour\"},\"_count\":{\"$avg\":\"$signalValue\"}}}";
String proStr = "{\"$project\":{\"hour\":\"$_id.hour\",\"_count\":1,\"_id\":0}},";
String orderStr = "{\"$sort\":{\"hour\":1}}";
DBObject match = BasicDBObject.parse(matchStr);
DBObject project = BasicDBObject.parse(projectStr);
DBObject matchDay = BasicDBObject.parse(matchDayStr);
DBObject unwind = BasicDBObject.parse(unwindStr);
DBObject group = BasicDBObject.parse(groupStr);
DBObject pro = BasicDBObject.parse(proStr);
DBObject order = BasicDBObject.parse(orderStr);
LinkedList<DBObject> list = new LinkedList<>();
list.add(match);
list.add(project);
list.add(matchDay);
list.add(unwind);
list.add(group);
list.add(pro);
list.add(order);
AggregateIterable resultSet = collection.aggregate(list);
MongoCursor<Document> cursor = resultSet.iterator();
while (cursor.hasNext()) {
Document document = cursor.next();
String hour = document.getString("hour");
Double value = document.getDouble("_count");
DecimalFormat df = new DecimalFormat("#.00");
if (value != null) {
value = Double.parseDouble(df.format(value));
}
Map<String, Object> map = new HashMap();
map.put("hour", hour);
map.put("value", value);
listResult.add(map);
}
return listResult;
}
/**
* @author huangquanguang
* @date 2020/3/18 11:41
* @description 执行语句查找mongodb
*/
private Double getResultByMongodb(String areaName, String signalId) {
Double result = 0.0;
MongoCollection collection = mongoTemplate.getCollection("air_condition");
String matchStr = "{\"$match\":{\"areaName\":\"" + areaName + "\",\"signalId\":\"" + signalId + "\"}}";
String orderStr = "{\"$sort\":{\"createTime\":-1}}";
String limitStr = "{\"$limit\":1}";
DBObject match = BasicDBObject.parse(matchStr);
DBObject order = BasicDBObject.parse(orderStr);
DBObject limit = BasicDBObject.parse(limitStr);
LinkedList<DBObject> list = new LinkedList<>();
list.add(match);
list.add(order);
list.add(limit);
AggregateIterable resultSet = collection.aggregate(list);
MongoCursor<Document> cursor = resultSet.iterator();
while (cursor.hasNext()) {
Document document = cursor.next();
if (null != document) {
result = document.getDouble("signalValue");
}
}
return result;
}
}
4.Dao层,继承了MongoRepository(这里的重点是对参数为空时的处理)
package com.cecjx.rotaryring.dao;
import com.cecjx.rotaryring.domain.AirConditionDO;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.List;
public interface AirConditionDao extends MongoRepository<AirConditionDO, String> {
@Query(value = "{" +
" 'signalId':{$in: ?#{ [0] } },\n" +
" 'signalValue': ?#{ ([1] == null) or ([2] == null) ? '{$exists:true}' : {$gte:[1], $lte:[2]} },\n" +
" 'createTime': ?#{ ([3] == '') or ([4] == '') ? '{$exists:true}' : {$gte:[3], $lte:[4]} }, \n" +
" 'areaName': ?#{ ([5] == '') ? '{$exists:true}' : {$regex:[5]} }\n" +
"}")
Page<AirConditionDO> findByColumnContaining(String[] signalIds, Double signalValueMin, Double signalValueMax, String startTime, String endTime, String areaName, Pageable pageable);
@Query(value = "{" +
" 'signalId':{$in: ?#{ [0] } },\n" +
" 'signalValue': ?#{ ([1] == null) or ([2] == null) ? '{$exists:true}' : {$gte:[1], $lte:[2]} },\n" +
" 'createTime': ?#{ ([3] == '') or ([4] == '') ? '{$exists:true}' : {$gte:[3], $lte:[4]} }, \n" +
" 'areaName': ?#{ ([5] == '') ? '{$exists:true}' : {$regex:[5]} }\n" +
"}")
List<AirConditionDO> findByColumnContaining(String[] signalIds, Double signalValueMin, Double signalValueMax, String startTime, String endTime, String areaName, Sort sort);
}
5.controller控制器测试:
import com.cecjx.common.utils.MyExcelExportUtil;
import com.cecjx.common.utils.PageUtils;
import com.cecjx.common.utils.R;
import com.cecjx.common.utils.StringUtils;
import com.cecjx.rotaryring.domain.AirConditionDO;
import com.cecjx.rotaryring.domain.TempHumDO;
import com.cecjx.rotaryring.service.AirConditionService;
import org.apache.catalina.servlet4preview.http.HttpServletRequest;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author huangquanguang
* @date 2020/2/21 10:19
* @description 精密空调控制器
*/
@Controller
@RequestMapping(value = "/rotary/airCondition")
public class AirConditionController {
@Autowired
private AirConditionService airConditionService;
/**
* 获取所有精密空调集合的数据
*/
@RequestMapping(value = "/list", method = RequestMethod.GET)
@ResponseBody
public PageUtils getPageList(@RequestParam Map<String, Object> params) throws ParseException {
return airConditionService.getPageList(params);
}
/**
* 精密空调可视化
*/
@RequestMapping(value = "/index")
@RequiresPermissions("rotary:air:realtime")
public String index() {
return "rotaryring/aircondition/realtime";
}
/**
* 精密空调可视化
*/
@RequestMapping(value = "/indexVue")
@RequiresPermissions("rotary:air:realtime")
public String indexVue() {
return "rotaryring/aircondition/realtimeVue";
}
/**
* 精密空调历史数据
*/
@RequestMapping(value = "/history")
@RequiresPermissions("rotary:air:history")
public String history() {
return "rotaryring/aircondition/history";
}
/**
* 精密空调告警数据
*/
@RequestMapping(value = "/warn")
@RequiresPermissions("rotary:air:warn")
public String warn() {
return "rotaryring/aircondition/warnLog";
}
/**
* 日报表
*/
@RequestMapping(value = "/dayReport")
@RequiresPermissions("rotary:air:dayReport")
public String dayReport(Model model) {
model.addAttribute("reportType", 0);
return "rotaryring/aircondition/report";
}
/**
* 月报表
*/
@RequestMapping(value = "/monthReport")
@RequiresPermissions("rotary:air:monthReport")
public String monthReport(Model model) {
model.addAttribute("reportType", 1);
return "rotaryring/aircondition/report";
}
/**
* 年报表
*/
@RequestMapping(value = "/yearReport")
@RequiresPermissions("rotary:air:yearReport")
public String yearReport(Model model) {
model.addAttribute("reportType", 2);
return "rotaryring/aircondition/report";
}
/**
* 查询某个区域的实时温度湿度
*
* @param areaType
* @return
*/
@RequestMapping(value = "/realTempHum", method = RequestMethod.GET)
@ResponseBody
public R realTempHum(Integer areaType) {
Map map = airConditionService.realTempHum(areaType);
return R.ok().put("data", map);
}
/**
* 查询某个区域某天的温度变化
*/
@RequestMapping(value = "/getTempByDate", method = RequestMethod.GET)
@ResponseBody
public R getTempByDate(Integer areaType, String date, Integer reportType) {
List<Map> list = airConditionService.getTempByDate(areaType, date, reportType);
return R.ok().put("data", list);
}
/**
* 查询某个区域某天的湿度变化
*/
@RequestMapping(value = "/getHumByDate", method = RequestMethod.GET)
@ResponseBody
public R getHumByDate(Integer areaType, String date, Integer reportType) {
List<Map> list = airConditionService.getHumByDate(areaType, date, reportType);
return R.ok().put("data", list);
}
/**
* @author huangquanguang
* @date 2020/3/26 16:03
* @description 精密空调数据Excel导出
*/
@RequestMapping(value = "/exportExcel")
public void exportExcel(@RequestParam Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String filename = "精密空调数据" + format.format(new Date().getTime()) + ".xls";
response.setContentType("application/ms-excel;charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));
OutputStream out = response.getOutputStream();
try {
List<AirConditionDO> airConditionDOS = airConditionService.listAll(params);
if (null != airConditionDOS && airConditionDOS.size() > 0) {
//监控项文字处理
for(AirConditionDO airConditionDO : airConditionDOS){
String signalName = airConditionDO.getSignalName();
if(!StringUtils.isEmpty(signalName)&&signalName.contains("温度")){
airConditionDO.setSignalName("温度");
}
else{
airConditionDO.setSignalName("湿度");
}
}
//超过excel的限度导出报错处理
if (airConditionDOS.size() <= 60000) {
MyExcelExportUtil.exportToFile(airConditionDOS, out);
} else {
List<List<AirConditionDO>> result = MyExcelExportUtil.splitList(airConditionDOS, 60000);
List<List<?>> lists = new ArrayList<>();
if (result != null && result.size() > 0) {
for (int i = 0; i < result.size(); i++) {
lists.add(result.get(i));
}
MyExcelExportUtil.exportToFileSheets(false, lists, out);
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
out.close();
}
}
}
6.项目需求仅对mongodb进行查询,如果需要新增及修改,可以参考下面代码,是一个完整的增删改查例子:
import com.cecjx.common.utils.PageUtils;
import com.cecjx.manage.demo.dao.PictureDao;
import com.cecjx.manage.demo.domain.PictureDO;
import com.cecjx.manage.demo.service.PictureService;
import com.github.pagehelper.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* mongodb逻辑处理
*
* @author huangquanguang
* @create 2019/12/24 15:47
*/
@Service("mongodbServiceImpl")
public class PictureServiceImpl implements PictureService {
private PictureDao pictureRepository;
@Autowired
public PictureServiceImpl(PictureDao pictureRepository) {
this.pictureRepository = pictureRepository;
}
public List<PictureDO> getPicList(int current, int rowCount, String sortid) {
PageRequest pr;
if ("asc".equals(sortid))
pr = new PageRequest(--current, rowCount, Direction.ASC, "id");
else if ("desc".equals(sortid))
pr = new PageRequest(--current, rowCount, Direction.DESC, "id");
else
pr = new PageRequest(--current, rowCount);
Page<PictureDO> page = pictureRepository.findAll(pr);
return page.getContent();
}
public Optional<PictureDO> getPictureById(String id) {
Optional<PictureDO> pic = pictureRepository.findById(id);
return pic;
}
public int getPictureNum() {
return (int) pictureRepository.count();
}
public void deletePicture(String id) {
Optional<PictureDO> pic = pictureRepository.findById(id);
PictureDO pictureDO = pic.get();
pictureRepository.delete(pictureDO);
}
public void SaveOrUpdatePicture(PictureDO p) {
pictureRepository.save(p);
}
public List<PictureDO> getSearchResult(int current, int rowCount, String sortid, String search) {
PageRequest pr;
if ("asc".equals(sortid))
pr = new PageRequest(--current, rowCount, Direction.ASC, "id");
else if ("desc".equals(sortid))
pr = new PageRequest(--current, rowCount, Direction.DESC, "id");
else
pr = new PageRequest(--current, rowCount);
Page<PictureDO> page = pictureRepository.findByFilenameContaining(search, pr);
return page.getContent();
}
public int getSearchResultTotal(String search) {
List<PictureDO> list = pictureRepository.findByFilenameContaining(search);
return list.size();
}
@Override
public PageUtils getPicPageList(Map<String, Object> params) {
// 列表查询
// Query query = new Query(params);
// mp 分页 start | --分页插件--自动识别DB
int page = Integer.parseInt((String) params.get("page"));
int pageSize = Integer.parseInt((String) params.getOrDefault("pageSize", 10));
String sort = (String) params.get("sort");
String search = (String) params.get("search");
PageRequest pr;
if ("asc".equals(sort))
pr = new PageRequest(--page, pageSize, Direction.ASC, "id");
else if ("desc".equals(sort))
pr = new PageRequest(--page, pageSize, Direction.DESC, "id");
else
pr = new PageRequest(--page, pageSize);
if (StringUtil.isEmpty(search)) {
Page<PictureDO> pictureDOPage = pictureRepository.findAll(pr);
List<PictureDO> pictureDOS = pictureDOPage.getContent();
return new PageUtils(pictureDOS, getPictureNum());
} else {
Page<PictureDO> pictureDOPage = pictureRepository.findByFilenameContaining(search, pr);
List<PictureDO> pictureDOS = pictureDOPage.getContent();
return new PageUtils(pictureDOS, getSearchResultTotal(search));
}
}
}