package com.ruoyi.jianguan.mongodb.service.impl; import com.ruoyi.common.core.dto.MongoChargingOrderQuery; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.integration.api.model.UpdateBalance; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringPageData; import com.ruoyi.jianguan.constant.IotConstant; import com.ruoyi.jianguan.mongodb.service.UploadRealTimeMonitoringDataService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Objects; @Service public class UploadRealTimeMonitoringDataServiceImpl implements UploadRealTimeMonitoringDataService { @Autowired private MongoTemplate mongoTemplate; @Override public int create(UploadRealTimeMonitoringData uploadRealTimeMonitoringData) { mongoTemplate.save(uploadRealTimeMonitoringData); return IotConstant.SUCCESS; } @Override public UploadRealTimeMonitoringData findById(String id) { return mongoTemplate.findById(id, UploadRealTimeMonitoringData.class); } @Override public List findAll() { return mongoTemplate.findAll(UploadRealTimeMonitoringData.class); } /** * 根据订单号查询监控数据 * @param code * @return */ @Override public List getDataByOrderCode(String code) { Query query = new Query(); if(StringUtils.isNotEmpty(code)){ query.addCriteria(Criteria.where("transaction_serial_number").is(code)); } List uploadRealTimeMonitoringData = mongoTemplate.find( query.with(Sort.by(Sort.Order.desc("create_time"))) , UploadRealTimeMonitoringData.class); return uploadRealTimeMonitoringData; } @Override public UploadRealTimeMonitoringPageData getDataAll(MongoChargingOrderQuery mongoChargingOrderQuery) throws ParseException { Query query = new Query(); // if (!values.isEmpty()){ // query.addCriteria(Criteria.where("transaction_serial_number").in(values)); // } if (mongoChargingOrderQuery.getCode() != null && !mongoChargingOrderQuery.getCode().isEmpty()) { query.addCriteria(Criteria.where("transaction_serial_number").regex(mongoChargingOrderQuery.getCode(),"i")); // "i" 表示不区分大小写 } if (mongoChargingOrderQuery.getOrderType() !=null){ query.addCriteria(Criteria.where("orderType").is(mongoChargingOrderQuery.getOrderType())); } if (mongoChargingOrderQuery.getSiteId() != null){ query.addCriteria(Criteria.where("siteId").is(mongoChargingOrderQuery.getSiteId())); } if (!mongoChargingOrderQuery.getSiteIds().isEmpty()){ query.addCriteria(Criteria.where("siteId").in(mongoChargingOrderQuery.getSiteIds())); } if (mongoChargingOrderQuery.getChargingPileCode() != null && !mongoChargingOrderQuery.getChargingPileCode().isEmpty()) { query.addCriteria(Criteria.where("charging_pile_code").is(mongoChargingOrderQuery.getChargingPileCode())); } if (mongoChargingOrderQuery.getChargingGunCode() != null && !mongoChargingOrderQuery.getChargingGunCode().isEmpty()){ query.addCriteria(Criteria.where("charging_gun_code").is(mongoChargingOrderQuery.getChargingGunCode())); } if (mongoChargingOrderQuery.getStatus() != null){ query.addCriteria(Criteria.where("status").is(mongoChargingOrderQuery.getStatus())); } if (mongoChargingOrderQuery.getCreateTime() != null) { String[] split = mongoChargingOrderQuery.getCreateTime().split(" - "); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date start = dateFormat.parse(split[0]); Date end = dateFormat.parse(split[1]); query.addCriteria(Criteria.where("create_time").gte(start).lt(end)); } if (mongoChargingOrderQuery.getLastTime() != null && mongoChargingOrderQuery.getLastTime() != null) { String[] split = mongoChargingOrderQuery.getLastTime().split(" - "); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date start = dateFormat.parse(split[0]); Date end = dateFormat.parse(split[1]); query.addCriteria(Criteria.where("last_time").gte(start).lt(end)); } long totalElements = mongoTemplate.count(query, UploadRealTimeMonitoringData.class); // 创建带有排序的 Pageable 对象 Pageable pageable = PageRequest.of( mongoChargingOrderQuery.getPageCurr()-1, mongoChargingOrderQuery.getPageSize(), Sort.by(Sort.Direction.DESC, "create_time") ); // 设置分页和排序 query.with(pageable); // 执行查询并获取 Page 对象 List page = mongoTemplate.find(query, UploadRealTimeMonitoringData.class,"upload_real_time_monitoring_data"); // 设置分页 // Pageable pageable = PageRequest.of(mongoChargingOrderQuery.getPageSize()*(mongoChargingOrderQuery.getPageCurr()-1), mongoChargingOrderQuery.getPageSize()); // query.with(pageable); // query.with(Sort.by(Sort.Direction.DESC,"create_time")); List uploadRealTimeMonitoringData = mongoTemplate.find( query , UploadRealTimeMonitoringData.class); UploadRealTimeMonitoringPageData uploadRealTimeMonitoringPageData = new UploadRealTimeMonitoringPageData(); uploadRealTimeMonitoringPageData.setCount(totalElements); uploadRealTimeMonitoringPageData.setRecords(page); return uploadRealTimeMonitoringPageData; } @Override public UploadRealTimeMonitoringData getLastDataById(String transaction_serial_number) { Query query = new Query(); if (StringUtils.isNotEmpty(transaction_serial_number)){ query.addCriteria(Criteria.where("transaction_serial_number").is(transaction_serial_number)); } // 按照 createdAt 字段降序排序 query.with(Sort.by(Sort.Direction.DESC, "create_time")); // 限制结果只返回一条记录 query.limit(1); return mongoTemplate.findOne(query, UploadRealTimeMonitoringData.class); } @Override public void delete(String id) { UploadRealTimeMonitoringData byId = findById(id.toString()); mongoTemplate.remove(byId); } @Override public void updateById(String id) { // 创建查询条件 Query query = new Query(Criteria.where("_id").is(id)); // 创建更新对象 Update update = new Update().set("last_time", new Date()); // 执行更新操作 mongoTemplate.updateFirst(query, update, UploadRealTimeMonitoringData.class); } @Override public List getRangeTimeData(Date startTime, Date endTime) { Query query = new Query(); // 根据时间范围查询 if (Objects.nonNull(startTime) && Objects.nonNull(endTime)) { query.addCriteria(Criteria.where("create_time").gte(startTime).lte(endTime)); } List list = mongoTemplate.find( query.with(Sort.by(Sort.Order.desc("create_time"))) , UploadRealTimeMonitoringData.class); return list; } }