能耗管理调整

liweidong
maxiangong 1 week ago
parent a6322dc9ea
commit 09a3c924c7
  1. 7
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IWorkCenterService.java
  2. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/WorkCenterServiceImpl.java
  3. 76
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyCoreUseController.java
  4. 190
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyMonitorController.java
  5. 325
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyQuotaController.java
  6. 299
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsEnergyTargetController.java
  7. 109
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/controller/BsPeakFlatValleyController.java
  8. 60
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyQuotaElectricExcel.java
  9. 48
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyQuotaElectricImportExcel.java
  10. 68
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyQuotaWaterExcel.java
  11. 92
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyQuotaWaterImportExcel.java
  12. 71
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetElectricExcel.java
  13. 71
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/excel/BsEnergyTargetWaterExcel.java
  14. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyCoreUseMapper.java
  15. 35
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyHistoryRecMapper.java
  16. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyQuotaMapper.java
  17. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/BsEnergyTargetMapper.java
  18. 59
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyCoreUseMapper.xml
  19. 66
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyHistoryRecMapper.xml
  20. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyMonitorMapper.xml
  21. 22
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyQuotaMapper.xml
  22. 44
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/EnergyTargetMapper.xml
  23. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/mapper/PeakFlatValleyMapper.xml
  24. 110
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/entity/BsEnergyCoreUseEntity.java
  25. 54
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/entity/BsEnergyHistoryRecEntity.java
  26. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/entity/BsEnergyMonitorEntity.java
  27. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/entity/BsEnergyQuotaEntity.java
  28. 14
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/entity/BsEnergyTargetEntity.java
  29. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/entity/BsPeakFlatValleyEntity.java
  30. 41
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/vo/BsEnergyCoreUseVO.java
  31. 38
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/pojo/vo/BsEnergyHistoryRecVO.java
  32. 36
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyCoreUseService.java
  33. 33
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyHistoryRecService.java
  34. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyQuotaService.java
  35. 67
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/IBsEnergyTargetService.java
  36. 287
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyCoreUseServiceImpl.java
  37. 31
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyHistoryRecServiceImpl.java
  38. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyQuotaServiceImpl.java
  39. 12
      blade-service/blade-desk/src/main/java/org/springblade/desk/energy/service/impl/BsEnergyTargetServiceImpl.java
  40. BIN
      blade-service/blade-desk/src/main/resources/Excel/energy/用水定额.xls
  41. BIN
      blade-service/blade-desk/src/main/resources/Excel/energy/用水目标.xls
  42. BIN
      blade-service/blade-desk/src/main/resources/Excel/energy/用电定额.xls
  43. BIN
      blade-service/blade-desk/src/main/resources/Excel/energy/用电目标.xls

@ -64,4 +64,11 @@ public interface IWorkCenterService extends BaseService<WorkCenter> {
* @return BsWorkCenterEntity 对象
*/
WorkCenter getWorkCenter(Long workCenterId);
/**
* 根据作业中心编码查找作业中心
* @param wcCode
* @return
*/
WorkCenter getWorkCenterByCode(String wcCode);
}

@ -4,6 +4,7 @@
package org.springblade.desk.basic.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -124,4 +125,11 @@ public class WorkCenterServiceImpl extends BaseServiceImpl<WorkCenterMapper, Wor
WorkCenter center = this.getById(workCenterId);
return center;
}
@Override
public WorkCenter getWorkCenterByCode(String wcCode) {
LambdaQueryWrapper<WorkCenter> qw = new LambdaQueryWrapper<WorkCenter>().eq(WorkCenter::getWcCode, wcCode);
WorkCenter center = this.getOne(qw);
return center;
}
}

@ -0,0 +1,76 @@
package org.springblade.desk.energy.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.desk.energy.pojo.entity.BsEnergyCoreUseEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyCoreUseVO;
import org.springblade.desk.energy.pojo.vo.BsEnergyHistoryRecVO;
import org.springblade.desk.energy.service.IBsEnergyCoreUseService;
import org.springblade.desk.energy.service.IBsEnergyHistoryRecService;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 水电能耗记录 控制器
*
* @author BladeX
* @since 2026-04-17
*/
@RestController
@AllArgsConstructor
@RequestMapping("/bsEnergyCoreUse")
@Tag(name = "水电能耗记录", description = "水电能耗记录接口")
public class BsEnergyCoreUseController extends BladeController {
private final IBsEnergyCoreUseService bsEnergyCoreUseService;
private final IBsEnergyHistoryRecService bsEnergyHistoryRecService;
/**
* 水电能耗记录 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyQuota")
public R<IPage<BsEnergyCoreUseVO>> page(BsEnergyCoreUseVO bsEnergyCoreUse, Query query) {
IPage<BsEnergyCoreUseVO> pages = bsEnergyCoreUseService.selectBsEnergyCoreUsePage(Condition.getPage(query), bsEnergyCoreUse);
return R.data(pages);
}
/**
* 能源定额 新增或修改
*/
@PostMapping("/updateIsJumbotron")
@Operation(summary = "新增或修改", description = "传入bsEnergyQuota")
public R updateIsJumbotron(@Valid @RequestBody BsEnergyCoreUseEntity bsEnergyCoreUse) {
if (bsEnergyCoreUse.getId() == null || bsEnergyCoreUse.getIsJumbotron() == null) {
R.fail("修改失败");
}
BsEnergyCoreUseEntity upd = new BsEnergyCoreUseEntity();
upd.setId(bsEnergyCoreUse.getId());
upd.setIsJumbotron(bsEnergyCoreUse.getIsJumbotron());
return R.status(bsEnergyCoreUseService.updateById(upd));
}
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyQuota")
public R<List<BsEnergyHistoryRecVO>> detail(BsEnergyCoreUseEntity bsEnergyCoreUse) {
BsEnergyCoreUseEntity bsEnergyCoreUseEntity = bsEnergyCoreUseService.getById(bsEnergyCoreUse.getId());
if (bsEnergyCoreUseEntity == null) {
R.fail("明细查询失败");
}
BsEnergyHistoryRecVO params = new BsEnergyHistoryRecVO();
params.setCreateTime(bsEnergyCoreUseEntity.getCreateTime());
List<BsEnergyHistoryRecVO> list = bsEnergyHistoryRecService.selectBsEnergyHistoryRec(params);
return R.data(list);
}
}

@ -25,6 +25,7 @@
*/
package org.springblade.desk.energy.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
@ -44,11 +45,15 @@ import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.energy.excel.BsEnergyMonitorExcel;
import org.springblade.desk.energy.pojo.entity.BsEnergyMonitorEntity;
import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyMonitorVO;
import org.springblade.desk.energy.service.IBsEnergyMonitorService;
import org.springblade.desk.energy.service.IBsEnergyTargetService;
import org.springblade.desk.energy.wrapper.BsEnergyMonitorWrapper;
import org.springframework.web.bind.annotation.*;
import java.math.RoundingMode;
import java.time.YearMonth;
import java.util.List;
import java.util.Map;
@ -64,68 +69,139 @@ import java.util.Map;
@Tag(name = "能源监控表", description = "能源监控表接口")
public class BsEnergyMonitorController extends BladeController {
private final IBsEnergyMonitorService bsEnergyMonitorService;
private final IBsEnergyMonitorService bsEnergyMonitorService;
/**
* 能源监控表 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyMonitor")
public R<BsEnergyMonitorVO> detail(BsEnergyMonitorEntity bsEnergyMonitor) {
BsEnergyMonitorEntity detail = bsEnergyMonitorService.getOne(Condition.getQueryWrapper(bsEnergyMonitor));
return R.data(BsEnergyMonitorWrapper.build().entityVO(detail));
}
private final IBsEnergyTargetService bsEnergyTargetService;
/**
* 能源监控表 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyMonitor")
public R<IPage<BsEnergyMonitorVO>> page(BsEnergyMonitorVO bsEnergyMonitor, Query query) {
IPage<BsEnergyMonitorVO> pages = bsEnergyMonitorService.selectBsEnergyMonitorPage(Condition.getPage(query), bsEnergyMonitor);
return R.data(pages);
}
/**
* 能源监控表 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyMonitor")
public R<BsEnergyMonitorVO> detail(BsEnergyMonitorEntity bsEnergyMonitor) {
BsEnergyMonitorEntity detail = bsEnergyMonitorService.getOne(Condition.getQueryWrapper(bsEnergyMonitor));
return R.data(BsEnergyMonitorWrapper.build().entityVO(detail));
}
/**
* 能源监控表 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsEnergyMonitor")
public R submit(@Valid @RequestBody BsEnergyMonitorEntity bsEnergyMonitor) {
if (bsEnergyMonitor.getId() == null) {
// 新增需要校验
BsEnergyMonitorEntity bsEnergyMonitorEntity = bsEnergyMonitorService.getOne(new QueryWrapper<BsEnergyMonitorEntity>().eq("month", bsEnergyMonitor.getMonth()));
if (bsEnergyMonitorEntity != null) {
return R.fail("该月份能源监控表已存在");
}
}
bsEnergyMonitor.setLastWaterRate(bsEnergyMonitor.getLastWater().divide(bsEnergyMonitor.getLastWaterTarget(), 2));
bsEnergyMonitor.setLastElectricRate(bsEnergyMonitor.getLastElectric().divide(bsEnergyMonitor.getLastElectricTarget(), 2));
bsEnergyMonitor.setCurrentWaterRate(bsEnergyMonitor.getCurrentWater().divide(bsEnergyMonitor.getCurrentWaterTarget(), 2));
bsEnergyMonitor.setCurrentElectricRate(bsEnergyMonitor.getCurrentElectric().divide(bsEnergyMonitor.getCurrentElectricTarget(), 2));
return R.status(bsEnergyMonitorService.saveOrUpdate(bsEnergyMonitor));
}
/**
* 能源监控表 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyMonitor")
public R<IPage<BsEnergyMonitorVO>> page(BsEnergyMonitorVO bsEnergyMonitor, Query query) {
IPage<BsEnergyMonitorVO> pages = bsEnergyMonitorService.selectBsEnergyMonitorPage(Condition.getPage(query), bsEnergyMonitor);
return R.data(pages);
}
/**
* 能源监控表 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsEnergyMonitorService.deleteLogic(Func.toLongList(ids)));
}
/**
* 能源监控表 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsEnergyMonitor")
public R submit(@Valid @RequestBody List<BsEnergyMonitorEntity> bsEnergyMonitorList) {
for (BsEnergyMonitorEntity bsEnergyMonitor : bsEnergyMonitorList) {
BsEnergyMonitorEntity exist = bsEnergyMonitorService.getOne(new QueryWrapper<BsEnergyMonitorEntity>().eq("month", bsEnergyMonitor.getMonth()));
if (exist != null && !exist.getId().equals(bsEnergyMonitor.getId())) {
return R.fail(bsEnergyMonitor.getMonth() + "月份能源监控表已存在");
}
if(bsEnergyMonitor.getLastWater() != null && bsEnergyMonitor.getLastOutput() != null){
bsEnergyMonitor.setLastWaterRate(bsEnergyMonitor.getLastWater().divide(bsEnergyMonitor.getLastOutput(), 6, RoundingMode.HALF_UP));
}
if(bsEnergyMonitor.getLastElectric() != null && bsEnergyMonitor.getLastOutput() != null){
bsEnergyMonitor.setLastElectricRate(bsEnergyMonitor.getLastElectric().divide(bsEnergyMonitor.getLastOutput(), 6, RoundingMode.HALF_UP));
}
if(bsEnergyMonitor.getCurrentWater() != null && bsEnergyMonitor.getCurrentOutput() != null){
bsEnergyMonitor.setCurrentWaterRate(bsEnergyMonitor.getCurrentWater().divide(bsEnergyMonitor.getCurrentOutput(), 6, RoundingMode.HALF_UP));
}
if(bsEnergyMonitor.getCurrentElectric() != null && bsEnergyMonitor.getCurrentOutput() != null){
bsEnergyMonitor.setCurrentElectricRate(bsEnergyMonitor.getCurrentElectric().divide(bsEnergyMonitor.getCurrentOutput(), 6, RoundingMode.HALF_UP));
}
}
return R.status(bsEnergyMonitorService.saveOrUpdateBatch(bsEnergyMonitorList));
}
/**
* 能源监控表 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsEnergyMonitorService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsEnergyMonitor")
@Operation(summary = "导出数据", description = "传入bsEnergyMonitor")
public void exportBsEnergyMonitor(@Parameter(hidden = true) @RequestParam Map<String, Object> bsEnergyMonitor, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<BsEnergyMonitorEntity> queryWrapper = Condition.getQueryWrapper(bsEnergyMonitor, BsEnergyMonitorEntity.class);
List<BsEnergyMonitorExcel> list = bsEnergyMonitorService.exportBsEnergyMonitor(queryWrapper);
ExcelUtil.export(response, "能源监控表数据" + DateUtil.time(), "能源监控表数据表", list, BsEnergyMonitorExcel.class);
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsEnergyMonitor")
@Operation(summary = "导出数据", description = "传入bsEnergyMonitor")
public void exportBsEnergyMonitor(@Parameter(hidden = true) @RequestParam Map<String, Object> bsEnergyMonitor, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<BsEnergyMonitorEntity> queryWrapper = Condition.getQueryWrapper(bsEnergyMonitor, BsEnergyMonitorEntity.class);
List<BsEnergyMonitorExcel> list = bsEnergyMonitorService.exportBsEnergyMonitor(queryWrapper);
ExcelUtil.export(response, "能源监控表数据" + DateUtil.time(), "能源监控表数据表", list, BsEnergyMonitorExcel.class);
}
/**
* 能源监控表 详情
*/
@GetMapping("/getLastYearDetail")
@Operation(summary = "上年度详情", description = "传入bsEnergyMonitor")
public R<BsEnergyMonitorEntity> getLastYearDetail(BsEnergyMonitorEntity bsEnergyMonitor) {
YearMonth currentMonth = YearMonth.parse(bsEnergyMonitor.getMonth());
String currentYear = String.valueOf(currentMonth.getYear());
YearMonth lastYearMonth = currentMonth.minusYears(1);
String lastMonth = lastYearMonth.toString();
String lastYear = String.valueOf(lastYearMonth.getYear());
String quarter = this.getQuarter(currentMonth.getMonth().getValue());
BsEnergyMonitorEntity detail = new BsEnergyMonitorEntity();
BsEnergyMonitorEntity lastYearDetail = bsEnergyMonitorService.getOne(new LambdaQueryWrapper<BsEnergyMonitorEntity>().eq(BsEnergyMonitorEntity::getMonth, lastMonth));
BsEnergyTargetEntity lastYearWaterTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, lastYear)
.eq(BsEnergyTargetEntity::getType, "1"));
BsEnergyTargetEntity currentYearWaterTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, currentYear)
.eq(BsEnergyTargetEntity::getType, "1"));
BsEnergyTargetEntity lastYearElectricTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, lastYear)
.eq(BsEnergyTargetEntity::getQuarter, quarter)
.eq(BsEnergyTargetEntity::getType, "2"));
BsEnergyTargetEntity currentYearElectricTarget = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, currentYear)
.eq(BsEnergyTargetEntity::getQuarter, quarter)
.eq(BsEnergyTargetEntity::getType, "2"));
if (lastYearDetail != null) {
detail.setLastWater(lastYearDetail.getCurrentWater());
detail.setLastElectric(lastYearDetail.getCurrentElectric());
detail.setLastOutput(lastYearDetail.getCurrentOutput());
detail.setLastWaterRate(lastYearDetail.getCurrentWaterRate());
detail.setLastElectricRate(lastYearDetail.getCurrentElectricRate());
}
if (lastYearWaterTarget != null) {
detail.setLastWaterTarget(lastYearWaterTarget.getTarget());
}
if (lastYearElectricTarget != null) {
detail.setLastElectricTarget(lastYearElectricTarget.getTarget());
}
if (currentYearWaterTarget != null) {
detail.setCurrentWaterTarget(currentYearWaterTarget.getTarget());
}
if (currentYearElectricTarget != null) {
detail.setCurrentElectricTarget(currentYearElectricTarget.getTarget());
}
return R.data(detail);
}
public static String getQuarter(int month) {
if (month <= 3) {
return "1";
} else if (month <= 6) {
return "2";
} else if (month <= 9) {
return "3";
} else {
return "4";
}
}
}

@ -25,10 +25,9 @@
*/
package org.springblade.desk.energy.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -44,15 +43,28 @@ import org.springblade.core.secure.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.energy.excel.BsEnergyQuotaExcel;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.service.IWorkCenterService;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.service.IEquipmentService;
import org.springblade.desk.energy.excel.BsEnergyQuotaElectricExcel;
import org.springblade.desk.energy.excel.BsEnergyQuotaElectricImportExcel;
import org.springblade.desk.energy.excel.BsEnergyQuotaWaterExcel;
import org.springblade.desk.energy.excel.BsEnergyQuotaWaterImportExcel;
import org.springblade.desk.energy.pojo.entity.BsEnergyQuotaEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyQuotaVO;
import org.springblade.desk.energy.service.IBsEnergyQuotaService;
import org.springblade.desk.energy.wrapper.BsEnergyQuotaWrapper;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* 能源定额 控制器
@ -66,67 +78,246 @@ import java.util.Map;
@Tag(name = "能源定额", description = "能源定额接口")
public class BsEnergyQuotaController extends BladeController {
private final IBsEnergyQuotaService bsEnergyQuotaService;
/**
* 能源定额 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyQuota")
public R<BsEnergyQuotaVO> detail(BsEnergyQuotaEntity bsEnergyQuota) {
BsEnergyQuotaEntity detail = bsEnergyQuotaService.getOne(Condition.getQueryWrapper(bsEnergyQuota));
return R.data(BsEnergyQuotaWrapper.build().entityVO(detail));
}
/**
* 能源定额 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyQuota")
public R<IPage<BsEnergyQuotaVO>> page(BsEnergyQuotaVO bsEnergyQuota, Query query) {
IPage<BsEnergyQuotaVO> pages = bsEnergyQuotaService.selectBsEnergyQuotaPage(Condition.getPage(query), bsEnergyQuota);
return R.data(pages);
}
/**
* 能源定额 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsEnergyQuota")
public R submit(@Valid @RequestBody BsEnergyQuotaEntity bsEnergyQuota) {
if (bsEnergyQuota.getId() == null){
// 新增需要校验
BsEnergyQuotaEntity bsEnergyQuotaEntity = bsEnergyQuotaService.getOne(new LambdaQueryWrapper<BsEnergyQuotaEntity>()
.eq(BsEnergyQuotaEntity::getWorkCenterId, bsEnergyQuota.getWorkCenterId())
.eq(BsEnergyQuotaEntity::getEquipmentId, bsEnergyQuota.getEquipmentId())
.eq(BsEnergyQuotaEntity::getType, bsEnergyQuota.getType())
.eq(BsEnergyQuotaEntity::getDate, bsEnergyQuota.getDate()));
if (bsEnergyQuotaEntity != null) {
return R.fail("该日期能源定额已存在");
}
}
return R.status(bsEnergyQuotaService.saveOrUpdate(bsEnergyQuota));
}
/**
* 能源定额 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsEnergyQuotaService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsEnergyQuota")
@Operation(summary = "导出数据", description = "传入bsEnergyQuota")
public void exportBsEnergyQuota(@Parameter(hidden = true) @RequestParam Map<String, Object> bsEnergyQuota, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<BsEnergyQuotaEntity> queryWrapper = Condition.getQueryWrapper(bsEnergyQuota, BsEnergyQuotaEntity.class);
List<BsEnergyQuotaExcel> list = bsEnergyQuotaService.exportBsEnergyQuota(queryWrapper);
ExcelUtil.export(response, "能源定额数据" + DateUtil.time(), "能源定额数据表", list, BsEnergyQuotaExcel.class);
}
private final IBsEnergyQuotaService bsEnergyQuotaService;
private final IEquipmentService equipmentService;
private final IWorkCenterService workCenterService;
/**
* 能源定额 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyQuota")
public R<BsEnergyQuotaVO> detail(BsEnergyQuotaEntity bsEnergyQuota) {
BsEnergyQuotaEntity detail = bsEnergyQuotaService.getOne(Condition.getQueryWrapper(bsEnergyQuota));
return R.data(BsEnergyQuotaWrapper.build().entityVO(detail));
}
/**
* 能源定额 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyQuota")
public R<IPage<BsEnergyQuotaVO>> page(BsEnergyQuotaVO bsEnergyQuota, Query query) {
IPage<BsEnergyQuotaVO> pages = bsEnergyQuotaService.selectBsEnergyQuotaPage(Condition.getPage(query), bsEnergyQuota);
return R.data(pages);
}
/**
* 能源定额 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsEnergyQuota")
public R submit(@Valid @RequestBody BsEnergyQuotaEntity bsEnergyQuota) {
BsEnergyQuotaEntity bsEnergyQuotaEntity = bsEnergyQuotaService.getOne(new LambdaQueryWrapper<BsEnergyQuotaEntity>()
.eq(BsEnergyQuotaEntity::getEquipmentId, bsEnergyQuota.getEquipmentId())
.eq(BsEnergyQuotaEntity::getType, bsEnergyQuota.getType()));
if (bsEnergyQuotaEntity != null && !bsEnergyQuotaEntity.getId().equals(bsEnergyQuota.getId())) {
String msg = "该设备能源定额已存在";
if ("1".equals(bsEnergyQuota.getType())) {
msg = "该设备用水定额已存在";
}
if ("2".equals(bsEnergyQuota.getType())) {
msg = "该设备用电定额已存在";
}
return R.fail(msg);
}
return R.status(bsEnergyQuotaService.saveOrUpdate(bsEnergyQuota));
}
/**
* 能源定额 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsEnergyQuotaService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsEnergyQuota")
@Operation(summary = "导出数据", description = "传入bsEnergyQuota")
public void exportBsEnergyQuota(@Parameter(hidden = true) @RequestParam Map<String, Object> bsEnergyQuota, BladeUser bladeUser, HttpServletResponse response) {
LambdaQueryWrapper<BsEnergyQuotaEntity> qw = new LambdaQueryWrapper<BsEnergyQuotaEntity>().eq(BsEnergyQuotaEntity::getType, bsEnergyQuota.get("type"));
List<BsEnergyQuotaEntity> list = bsEnergyQuotaService.list(qw);
if ("1".equals(bsEnergyQuota.get("type"))) {
List<BsEnergyQuotaWaterExcel> bsEnergyTargetWaterExcels = BeanUtil.copyToList(list, BsEnergyQuotaWaterExcel.class);
ExcelUtil.export(response, "用水定额数据" + DateUtil.time(), "用水定额数据表", bsEnergyTargetWaterExcels, BsEnergyQuotaWaterExcel.class);
} else {
List<BsEnergyQuotaElectricExcel> bsEnergyTargetElectricExcels = BeanUtil.copyToList(list, BsEnergyQuotaElectricExcel.class);
ExcelUtil.export(response, "用电定额数据" + DateUtil.time(), "用电定额数据表", bsEnergyTargetElectricExcels, BsEnergyQuotaElectricExcel.class);
}
}
@GetMapping("/water-download-excel-template")
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<Resource> waterDownloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/energy/用水定额.xls",
"导入模版-用水定额.xls");
}
@GetMapping("/electric-download-excel-template")
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<Resource> electricDownloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/energy/用电定额.xls",
"导入模版-用电定额.xls");
}
@PostMapping("/water-import-excel")
@Operation(summary = "导入Excel", description = "MultipartFile")
public R waterImportExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<BsEnergyQuotaWaterImportExcel> importList = ExcelUtil.read(
file, 0, 1, BsEnergyQuotaWaterImportExcel.class
);
boolean result = true;
Set<String> existSet = new HashSet<>();
StringBuffer msg = new StringBuffer();
List<BsEnergyQuotaEntity> list = new ArrayList<>();
for (BsEnergyQuotaWaterImportExcel excel : importList) {
LocalDate parse = LocalDate.parse(excel.getDate(), DateTimeFormatter.ofPattern("yyyy/M/d"));
String newDate = parse.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
excel.setDate(newDate);
EquipmentEntity equipmentEntity = equipmentService.getDeEquipmentCardByCode(excel.getDeviceCode());
if (equipmentEntity == null) {
msg.append("设备【" + excel.getDeviceCode() + "】不存在\rn");
result = false;
continue;
}
List<String> wcCodes = Arrays.asList(excel.getWcCode().split(","));
StringBuffer workCenterId = new StringBuffer();
StringBuffer workCenterName = new StringBuffer();
for (String wcCode : wcCodes) {
WorkCenter workCenter = workCenterService.getWorkCenterByCode(wcCode);
if (workCenter == null) {
msg.append("作业中心【" + wcCode + "】不存在\rn");
result = false;
break;
}
if (workCenterId.length() > 0) {
workCenterId.append(",");
}
workCenterId.append(workCenter.getId());
if (workCenterName.length() > 0) {
workCenterName.append(",");
}
workCenterName.append(workCenter.getWcName());
}
if (!result) {
continue;
}
if (existSet.contains(excel.getDeviceCode())) {
msg.append("Excel里设备【" + excel.getDeviceCode() + "】重复了\rn");
result = false;
continue;
}
existSet.add(excel.getDeviceCode());
BsEnergyQuotaEntity exist = bsEnergyQuotaService.getOne(new LambdaQueryWrapper<BsEnergyQuotaEntity>().
eq(BsEnergyQuotaEntity::getEquipmentId, equipmentEntity.getId())
.eq(BsEnergyQuotaEntity::getType, "1"));
if (exist != null) {
msg.append(excel.getDeviceCode() + "设备用水定额已存在\n");
result = false;
continue;
}
BsEnergyQuotaEntity bsEnergyQuotaEntity = new BsEnergyQuotaEntity();
BeanUtils.copyProperties(excel, bsEnergyQuotaEntity);
bsEnergyQuotaEntity.setEquipmentId(equipmentEntity.getId());
bsEnergyQuotaEntity.setEquipmentName(equipmentEntity.getDeviceName());
bsEnergyQuotaEntity.setWorkCenterId(workCenterId.toString());
bsEnergyQuotaEntity.setWorkCenterName(workCenterName.toString());
bsEnergyQuotaEntity.setType("1");
list.add(bsEnergyQuotaEntity);
}
bsEnergyQuotaService.saveBatch(list);
if (result) {
return R.success("导入成功");
} else {
return R.fail(msg.toString());
}
}
@PostMapping("/electric-import-excel")
@Operation(summary = "导入Excel", description = "MultipartFile")
public R electricImportExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<BsEnergyQuotaElectricImportExcel> importList = ExcelUtil.read(
file, 0, 1, BsEnergyQuotaElectricImportExcel.class
);
boolean result = true;
Set<String> existSet = new HashSet<>();
StringBuffer msg = new StringBuffer();
List<BsEnergyQuotaEntity> list = new ArrayList<>();
for (BsEnergyQuotaElectricImportExcel excel : importList) {
EquipmentEntity equipmentEntity = equipmentService.getDeEquipmentCardByCode(excel.getDeviceCode());
if (equipmentEntity == null) {
msg.append("设备【" + excel.getDeviceCode() + "】不存在\rn");
result = false;
continue;
}
List<String> wcCodes = Arrays.asList(excel.getWcCode().split(","));
StringBuffer workCenterId = new StringBuffer();
StringBuffer workCenterName = new StringBuffer();
for (String wcCode : wcCodes) {
WorkCenter workCenter = workCenterService.getWorkCenterByCode(wcCode);
if (workCenter == null) {
msg.append("作业中心【" + wcCode + "】不存在\rn");
result = false;
break;
}
if (workCenterId.length() > 0) {
workCenterId.append(",");
}
workCenterId.append(workCenter.getId());
if (workCenterName.length() > 0) {
workCenterName.append(",");
}
workCenterName.append(workCenter.getWcName());
}
if (!result) {
continue;
}
if (existSet.contains(excel.getDeviceCode())) {
msg.append("Excel里设备【" + excel.getDeviceCode() + "】重复了\rn");
result = false;
continue;
}
existSet.add(excel.getDeviceCode());
BsEnergyQuotaEntity exist = bsEnergyQuotaService.getOne(new LambdaQueryWrapper<BsEnergyQuotaEntity>().
eq(BsEnergyQuotaEntity::getEquipmentId, equipmentEntity.getId())
.eq(BsEnergyQuotaEntity::getType, "2"));
if (exist != null) {
msg.append(excel.getDeviceCode() + "设备用电定额已存在\n");
result = false;
continue;
}
BsEnergyQuotaEntity bsEnergyQuotaEntity = new BsEnergyQuotaEntity();
BeanUtils.copyProperties(excel, bsEnergyQuotaEntity);
bsEnergyQuotaEntity.setEquipmentId(equipmentEntity.getId());
bsEnergyQuotaEntity.setEquipmentName(equipmentEntity.getDeviceName());
bsEnergyQuotaEntity.setWorkCenterId(workCenterId.toString());
bsEnergyQuotaEntity.setWorkCenterName(workCenterName.toString());
bsEnergyQuotaEntity.setType("2");
list.add(bsEnergyQuotaEntity);
}
bsEnergyQuotaService.saveBatch(list);
if (result) {
return R.success("导入成功");
} else {
return R.fail(msg.toString());
}
}
}

@ -25,9 +25,10 @@
*/
package org.springblade.desk.energy.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -43,16 +44,22 @@ import org.springblade.core.secure.annotation.IsAdmin;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.energy.excel.BsEnergyTargetExcel;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.energy.excel.BsEnergyTargetElectricExcel;
import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel;
import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO;
import org.springblade.desk.energy.service.IBsEnergyTargetService;
import org.springblade.desk.energy.wrapper.BsEnergyTargetWrapper;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.Resource;
import org.springframework.data.redis.hash.HashMapper;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 能耗目标表 控制器
@ -66,85 +73,209 @@ import java.util.Map;
@Tag(name = "能耗目标表", description = "能耗目标表接口")
public class BsEnergyTargetController extends BladeController {
private final IBsEnergyTargetService bsEnergyTargetService;
/**
* 能耗目标表 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyTarget")
public R<BsEnergyTargetVO> detail(BsEnergyTargetEntity bsEnergyTarget) {
BsEnergyTargetEntity detail = bsEnergyTargetService.getOne(Condition.getQueryWrapper(bsEnergyTarget));
return R.data(BsEnergyTargetWrapper.build().entityVO(detail));
}
/**
* 能耗目标表 获取用水目标
*/
@GetMapping("/detailByWater")
@Operation(summary = "根据月份获取用水目标", description = "获取用水目标")
public R<BigDecimal> getWaterTargetByMonth(String month) {
BigDecimal waterTarget = bsEnergyTargetService.getWaterTargetByMonth(month);
return R.data(waterTarget);
}
/**
* 能耗目标表 获取用水目标
*/
@GetMapping("/detailByElectric")
@Operation(summary = "根据月份获取用电目标", description = "获取用电目标")
public R<BigDecimal> getElectricTargetByMonth(String month) {
BigDecimal electricTarget = bsEnergyTargetService.getElectricTargetByMonth(month);
return R.data(electricTarget);
}
/**
* 能耗目标表 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyTarget")
public R<IPage<BsEnergyTargetVO>> page(BsEnergyTargetVO bsEnergyTarget, Query query) {
IPage<BsEnergyTargetVO> pages = bsEnergyTargetService.selectBsEnergyTargetPage(Condition.getPage(query), bsEnergyTarget);
return R.data(pages);
}
/**
* 能耗目标表 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsEnergyTarget")
public R submit(@Valid @RequestBody BsEnergyTargetEntity bsEnergyTarget) {
if (bsEnergyTarget.getId() == null) {
// 新增需要校验
BsEnergyTargetEntity bsEnergyTargetEntity = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getMonth, bsEnergyTarget.getMonth())
.eq(BsEnergyTargetEntity::getType, bsEnergyTarget.getType()));
if (bsEnergyTargetEntity != null) {
return R.fail("该月份能耗目标已存在");
}
}
return R.status(bsEnergyTargetService.saveOrUpdate(bsEnergyTarget));
}
/**
* 能耗目标表 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsEnergyTargetService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsEnergyTarget")
@Operation(summary = "导出数据", description = "传入bsEnergyTarget")
public void exportBsEnergyTarget(@Parameter(hidden = true) @RequestParam Map<String, Object> bsEnergyTarget, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<BsEnergyTargetEntity> queryWrapper = Condition.getQueryWrapper(bsEnergyTarget, BsEnergyTargetEntity.class);
List<BsEnergyTargetExcel> list = bsEnergyTargetService.exportBsEnergyTarget(queryWrapper);
ExcelUtil.export(response, "能耗目标表数据" + DateUtil.time(), "能耗目标表数据表", list, BsEnergyTargetExcel.class);
}
private final IBsEnergyTargetService bsEnergyTargetService;
/**
* 能耗目标表 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsEnergyTarget")
public R<BsEnergyTargetVO> detail(BsEnergyTargetEntity bsEnergyTarget) {
BsEnergyTargetEntity detail = bsEnergyTargetService.getOne(Condition.getQueryWrapper(bsEnergyTarget));
return R.data(BsEnergyTargetWrapper.build().entityVO(detail));
}
/**
* 能耗目标表 获取用水目标
*/
@GetMapping("/detailByWater")
@Operation(summary = "根据月份获取用水目标", description = "获取用水目标")
public R<BigDecimal> getWaterTargetByMonth(String month) {
BigDecimal waterTarget = bsEnergyTargetService.getWaterTargetByMonth(month);
return R.data(waterTarget);
}
/**
* 能耗目标表 获取用水目标
*/
@GetMapping("/detailByElectric")
@Operation(summary = "根据月份获取用电目标", description = "获取用电目标")
public R<BigDecimal> getElectricTargetByMonth(String month) {
BigDecimal electricTarget = bsEnergyTargetService.getElectricTargetByMonth(month);
return R.data(electricTarget);
}
/**
* 能耗目标表 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsEnergyTarget")
public R<IPage<BsEnergyTargetVO>> page(BsEnergyTargetVO bsEnergyTarget, Query query) {
IPage<BsEnergyTargetVO> pages = bsEnergyTargetService.selectBsEnergyTargetPage(Condition.getPage(query), bsEnergyTarget);
return R.data(pages);
}
/**
* 能耗目标表 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsEnergyTarget")
public R submit(@Valid @RequestBody BsEnergyTargetEntity bsEnergyTarget) {
BsEnergyTargetEntity bsEnergyTargetEntity = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, bsEnergyTarget.getYear())
.eq(BsEnergyTargetEntity::getType, bsEnergyTarget.getType())
.eq(bsEnergyTarget.getQuarter() != null, BsEnergyTargetEntity::getQuarter, bsEnergyTarget.getQuarter()));
if (bsEnergyTargetEntity != null && !bsEnergyTargetEntity.getId().equals(bsEnergyTarget.getId())) {
if ("1".equals(bsEnergyTarget.getType())) {
return R.fail("该年份能耗目标已存在");
}
if ("2".equals(bsEnergyTarget.getType())) {
return R.fail("该季度能耗目标已存在");
}
}
return R.status(bsEnergyTargetService.saveOrUpdate(bsEnergyTarget));
}
/**
* 能耗目标表 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsEnergyTargetService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsEnergyTarget")
@Operation(summary = "导出数据", description = "传入bsEnergyTarget")
public void exportBsEnergyTarget(@Parameter(hidden = true) @RequestParam Map<String, Object> bsEnergyTarget, BladeUser bladeUser, HttpServletResponse response) {
Map<String, Object> conMap = new HashMap();
conMap.put("type", bsEnergyTarget.get("type"));
conMap.put("isDeleted", 0);
List<BsEnergyTargetEntity> list = bsEnergyTargetService.listByMap(conMap);
if ("1".equals(bsEnergyTarget.get("type"))) {
List<BsEnergyTargetWaterExcel> bsEnergyTargetWaterExcels = BeanUtil.copyToList(list, BsEnergyTargetWaterExcel.class);
ExcelUtil.export(response, "用水目标" + DateUtil.time(), "用水目标", bsEnergyTargetWaterExcels, BsEnergyTargetWaterExcel.class);
} else {
List<BsEnergyTargetElectricExcel> bsEnergyTargetElectricExcels = BeanUtil.copyToList(list, BsEnergyTargetElectricExcel.class);
ExcelUtil.export(response, "用电目标" + DateUtil.time(), "用电目标", bsEnergyTargetElectricExcels, BsEnergyTargetElectricExcel.class);
}
}
@GetMapping("/water-download-excel-template")
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<Resource> waterDownloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/energy/用水目标.xls",
"导入模版-用水目标.xls");
}
@GetMapping("/electric-download-excel-template")
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<Resource> electricDownloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/energy/用电目标.xls",
"导入模版-用电目标.xls");
}
@PostMapping("/water-import-excel")
@Operation(summary = "导入Excel", description = "MultipartFile")
public R waterImportExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<BsEnergyTargetWaterExcel> importList = ExcelUtil.read(
file, 0, 1, BsEnergyTargetWaterExcel.class
);
boolean result = true;
Set<String> existSet = new HashSet<>();
StringBuffer msg = new StringBuffer();
List<BsEnergyTargetEntity> list = new ArrayList<>();
for (BsEnergyTargetWaterExcel excel : importList) {
if (existSet.contains(excel.getYear())) {
msg.append("Excel里【" + excel.getYear() + "】重复了\rn");
result = false;
continue;
}
existSet.add(excel.getYear());
BsEnergyTargetEntity exist = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, excel.getYear())
.eq(BsEnergyTargetEntity::getType, "1"));
if (exist != null) {
msg.append(excel.getYear() + "能耗目标已存在\n");
result = false;
continue;
}
BsEnergyTargetEntity bsEnergyTargetEntity = new BsEnergyTargetEntity();
BeanUtils.copyProperties(excel, bsEnergyTargetEntity);
bsEnergyTargetEntity.setType("1");
list.add(bsEnergyTargetEntity);
}
bsEnergyTargetService.saveBatch(list);
if (result) {
return R.success("导入成功");
} else {
return R.fail(msg.toString());
}
}
@PostMapping("/electric-import-excel")
@Operation(summary = "导入Excel", description = "MultipartFile")
public R electricImportExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<BsEnergyTargetElectricExcel> importList = ExcelUtil.read(
file, 0, 1, BsEnergyTargetElectricExcel.class
);
boolean result = true;
Set<String> existSet = new HashSet<>();
StringBuffer msg = new StringBuffer();
List<BsEnergyTargetEntity> list = new ArrayList<>();
for (BsEnergyTargetElectricExcel excel : importList) {
String key = excel.getYear() + "-" + excel.getQuarter();
if (existSet.contains(key)) {
msg.append("Excel里【" + key + "】重复了\rn");
result = false;
continue;
}
existSet.add(key);
if("第一季度".equals(excel.getQuarter())){
excel.setQuarter("1");
} else if("第二季度".equals(excel.getQuarter())){
excel.setQuarter("2");
} else if("第三季度".equals(excel.getQuarter())){
excel.setQuarter("3");
} else if("第四季度".equals(excel.getQuarter())){
excel.setQuarter("4");
}
BsEnergyTargetEntity exist = bsEnergyTargetService.getOne(new LambdaQueryWrapper<BsEnergyTargetEntity>().
eq(BsEnergyTargetEntity::getYear, excel.getYear())
.eq(BsEnergyTargetEntity::getType, "2")
.eq(BsEnergyTargetEntity::getQuarter, excel.getQuarter()));
if (exist != null) {
msg.append(key + "能耗目标已存在\n");
result = false;
continue;
}
BsEnergyTargetEntity bsEnergyTargetEntity = new BsEnergyTargetEntity();
BeanUtils.copyProperties(excel, bsEnergyTargetEntity);
bsEnergyTargetEntity.setType("2");
list.add(bsEnergyTargetEntity);
}
bsEnergyTargetService.saveBatch(list);
if (result) {
return R.success("导入成功");
} else {
return R.fail(msg.toString());
}
}
}

@ -66,65 +66,64 @@ import java.util.Map;
@Tag(name = "峰平谷", description = "峰平谷接口")
public class BsPeakFlatValleyController extends BladeController {
private final IBsPeakFlatValleyService bsPeakFlatValleyService;
private final IBsPeakFlatValleyService bsPeakFlatValleyService;
/**
* 峰平谷 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsPeakFlatValley")
public R<BsPeakFlatValleyVO> detail(BsPeakFlatValleyEntity bsPeakFlatValley) {
BsPeakFlatValleyEntity detail = bsPeakFlatValleyService.getOne(Condition.getQueryWrapper(bsPeakFlatValley));
return R.data(BsPeakFlatValleyWrapper.build().entityVO(detail));
}
/**
* 峰平谷 详情
*/
@GetMapping("/detail")
@Operation(summary = "详情", description = "传入bsPeakFlatValley")
public R<BsPeakFlatValleyVO> detail(BsPeakFlatValleyEntity bsPeakFlatValley) {
BsPeakFlatValleyEntity detail = bsPeakFlatValleyService.getOne(Condition.getQueryWrapper(bsPeakFlatValley));
return R.data(BsPeakFlatValleyWrapper.build().entityVO(detail));
}
/**
* 峰平谷 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsPeakFlatValley")
public R<IPage<BsPeakFlatValleyVO>> page(BsPeakFlatValleyVO bsPeakFlatValley, Query query) {
IPage<BsPeakFlatValleyVO> pages = bsPeakFlatValleyService.selectBsPeakFlatValleyPage(Condition.getPage(query), bsPeakFlatValley);
return R.data(pages);
}
/**
* 峰平谷 自定义分页
*/
@GetMapping("/page")
@Operation(summary = "分页", description = "传入bsPeakFlatValley")
public R<IPage<BsPeakFlatValleyVO>> page(BsPeakFlatValleyVO bsPeakFlatValley, Query query) {
IPage<BsPeakFlatValleyVO> pages = bsPeakFlatValleyService.selectBsPeakFlatValleyPage(Condition.getPage(query), bsPeakFlatValley);
return R.data(pages);
}
/**
* 峰平谷 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsPeakFlatValley")
public R submit(@Valid @RequestBody BsPeakFlatValleyEntity bsPeakFlatValley) {
if (bsPeakFlatValley.getId() == null){
// 新增校验是否存在
BsPeakFlatValleyEntity bsPeakFlatValleyEntity = bsPeakFlatValleyService.getOne(new LambdaQueryWrapper<BsPeakFlatValleyEntity>()
.eq(BsPeakFlatValleyEntity::getMonth, bsPeakFlatValley.getMonth()));
if (bsPeakFlatValleyEntity != null) {
return R.fail("该月份峰平谷已存在");
}
}
return R.status(bsPeakFlatValleyService.saveOrUpdate(bsPeakFlatValley));
}
/**
* 峰平谷 新增或修改
*/
@PostMapping("/submit")
@Operation(summary = "新增或修改", description = "传入bsPeakFlatValley")
public R submit(@Valid @RequestBody List<BsPeakFlatValleyEntity> bsPeakFlatValleyList) {
for (BsPeakFlatValleyEntity bsPeakFlatValley : bsPeakFlatValleyList) {
BsPeakFlatValleyEntity exist = bsPeakFlatValleyService.getOne(new LambdaQueryWrapper<BsPeakFlatValleyEntity>()
.eq(BsPeakFlatValleyEntity::getMonth, bsPeakFlatValley.getMonth()));
if (exist != null && !exist.getId().equals(bsPeakFlatValley.getId())) {
return R.fail("该月份峰平谷已存在");
}
}
return R.status(bsPeakFlatValleyService.saveOrUpdateBatch(bsPeakFlatValleyList));
}
/**
* 峰平谷 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsPeakFlatValleyService.deleteLogic(Func.toLongList(ids)));
}
/**
* 峰平谷 删除
*/
@PostMapping("/remove")
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(bsPeakFlatValleyService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsPeakFlatValley")
@ApiOperationSupport(order = 9)
@Operation(summary = "导出数据", description = "传入bsPeakFlatValley")
public void exportBsPeakFlatValley(@Parameter(hidden = true) @RequestParam Map<String, Object> bsPeakFlatValley, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<BsPeakFlatValleyEntity> queryWrapper = Condition.getQueryWrapper(bsPeakFlatValley, BsPeakFlatValleyEntity.class);
List<BsPeakFlatValleyExcel> list = bsPeakFlatValleyService.exportBsPeakFlatValley(queryWrapper);
ExcelUtil.export(response, "峰平谷数据" + DateUtil.time(), "峰平谷数据表", list, BsPeakFlatValleyExcel.class);
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-bsPeakFlatValley")
@ApiOperationSupport(order = 9)
@Operation(summary = "导出数据", description = "传入bsPeakFlatValley")
public void exportBsPeakFlatValley(@Parameter(hidden = true) @RequestParam Map<String, Object> bsPeakFlatValley, BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<BsPeakFlatValleyEntity> queryWrapper = Condition.getQueryWrapper(bsPeakFlatValley, BsPeakFlatValleyEntity.class);
List<BsPeakFlatValleyExcel> list = bsPeakFlatValleyService.exportBsPeakFlatValley(queryWrapper);
ExcelUtil.export(response, "峰平谷数据" + DateUtil.time(), "峰平谷数据表", list, BsPeakFlatValleyExcel.class);
}
}

@ -0,0 +1,60 @@
package org.springblade.desk.energy.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class BsEnergyQuotaElectricExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 作业中心
*/
@ColumnWidth(50)
@ExcelProperty("作业中心")
private String workCenterName;
/**
* 作业中心编码
*/
@ColumnWidth(50)
@ExcelProperty("作业中心编码")
private String wcCode;
/**
* 设备
*/
@ColumnWidth(50)
@ExcelProperty("设备")
private String equipmentName;
/**
* 设备编码
*/
@ColumnWidth(50)
@ExcelProperty("设备")
private String deviceCode;
/**
* 日期
*/
@ColumnWidth(50)
@ExcelProperty("日期")
private String date;
/**
* 用电量
*/
@ColumnWidth(50)
@ExcelProperty("定额单位面积用电量(kWh/dm²)")
private BigDecimal electricNum;
}

@ -0,0 +1,48 @@
package org.springblade.desk.energy.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class BsEnergyQuotaElectricImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 作业中心编码
*/
@ColumnWidth(50)
@ExcelProperty("作业中心编码")
private String wcCode;
/**
* 设备编码
*/
@ColumnWidth(50)
@ExcelProperty("设备编码")
private String deviceCode;
/**
* 日期
*/
@ColumnWidth(50)
@ExcelProperty("日期")
private String date;
/**
* 用电量
*/
@ColumnWidth(50)
@ExcelProperty("定额单位面积用电量(kWh/dm²)")
private BigDecimal electricNum;
}

@ -26,9 +26,12 @@
package org.springblade.desk.energy.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
@ -47,41 +50,34 @@ import java.io.Serial;
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class BsEnergyQuotaExcel implements Serializable {
public class BsEnergyQuotaWaterExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
* 作业中心
*/
@ColumnWidth(20)
@ExcelProperty("ID")
private Long id;
@ColumnWidth(50)
@ExcelProperty("作业中心")
private String workCenterName;
/**
* 类型 1-用水 2-用电
* 作业中心编码
*/
@ColumnWidth(20)
@ExcelProperty("类型 1-用水 2-用电")
private String type;
@Schema(description = "作业中心编码")
private String wcCode;
/**
* 作业中心ID
* 设备
*/
@ColumnWidth(20)
@ExcelProperty("作业中心ID")
private Long workCenterId;
@ColumnWidth(50)
@ExcelProperty("设备")
private String equipmentName;
/**
* 设备ID
* 设备编码
*/
@ColumnWidth(20)
@ExcelProperty("设备ID")
private Long equipmentId;
/**
* 月份
*/
@ColumnWidth(20)
@ExcelProperty("月份")
private String month;
@Schema(description = "设备编码")
private String deviceCode;
/**
* 日期
*/
@ -91,26 +87,14 @@ public class BsEnergyQuotaExcel implements Serializable {
/**
* 自来水用水量
*/
@ColumnWidth(20)
@ExcelProperty("自来水用水量")
private Long tapWaterNum;
@ColumnWidth(50)
@ExcelProperty("自来水用水量(L/dm²)")
private BigDecimal tapWaterNum;
/**
* 纯水用水量
*/
@ColumnWidth(20)
@ExcelProperty("纯水用水量")
private Long pureWaterNum;
/**
* 用电量
*/
@ColumnWidth(20)
@ExcelProperty("用电量")
private Long electricNum;
/**
* 是否已删除
*/
@ColumnWidth(20)
@ExcelProperty("是否已删除")
private Long isDeleted;
@ColumnWidth(50)
@ExcelProperty("纯水用水量(L/dm²)")
private BigDecimal pureWaterNum;
}

@ -0,0 +1,92 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.energy.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.io.Serial;
/**
* 能源定额 Excel实体类
*
* @author BladeX
* @since 2026-03-02
*/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class BsEnergyQuotaWaterImportExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 作业中心编码
*/
@ColumnWidth(50)
@ExcelProperty("作业中心编码")
private String wcCode;
/**
* 设备编码
*/
@ColumnWidth(50)
@ExcelProperty("设备编码")
private String deviceCode;
/**
* 日期
*/
@ColumnWidth(20)
@ExcelProperty("日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private String date;
/**
* 自来水用水量
*/
@ColumnWidth(50)
@ExcelProperty("自来水用水量(L/dm²)")
private BigDecimal tapWaterNum;
/**
* 纯水用水量
*/
@ColumnWidth(50)
@ExcelProperty("纯水用水量(L/dm²)")
private BigDecimal pureWaterNum;
}

@ -26,16 +26,15 @@
package org.springblade.desk.energy.excel;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import java.io.Serializable;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
@ -48,46 +47,30 @@ import java.io.Serial;
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class BsEnergyTargetExcel implements Serializable {
public class BsEnergyTargetElectricExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 年份
*/
@ColumnWidth(50)
@ExcelProperty("年份")
private String year;
@Serial
private static final long serialVersionUID = 1L;
/**
* 季度
*/
@ColumnWidth(50)
@ExcelProperty("季度")
private String quarter;
/**
* ID
*/
@ColumnWidth(20)
@ExcelProperty("ID")
private Long id;
/**
* 类型 1-用水 2-用电
*/
@ColumnWidth(20)
@ExcelProperty("类型 1-用水 2-用电")
private String type;
/**
* 月份
*/
@ColumnWidth(20)
@ExcelProperty("月份")
private String month;
/**
* 日期
*/
@ColumnWidth(20)
@ExcelProperty("日期")
private String date;
/**
* 目标
*/
@ColumnWidth(20)
@ExcelProperty("目标")
private Long target;
/**
* 是否已删除
*/
@ColumnWidth(20)
@ExcelProperty("是否已删除")
private Long isDeleted;
/**
* 用电目标(kWh/dm²)
*/
@ColumnWidth(50)
@ExcelProperty("用电目标(kWh/dm²)")
private BigDecimal target;
}

@ -0,0 +1,71 @@
/**
* BladeX Commercial License Agreement
* Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
* <p>
* Use of this software is governed by the Commercial License Agreement
* obtained after purchasing a license from BladeX.
* <p>
* 1. This software is for development use only under a valid license
* from BladeX.
* <p>
* 2. Redistribution of this software's source code to any third party
* without a commercial license is strictly prohibited.
* <p>
* 3. Licensees may copyright their own code but cannot use segments
* from this software for such purposes. Copyright of this software
* remains with BladeX.
* <p>
* Using this software signifies agreement to this License, and the software
* must not be used for illegal purposes.
* <p>
* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
* not liable for any claims arising from secondary or illegal development.
* <p>
* Author: Chill Zhuang (bladejava@qq.com)
*/
package org.springblade.desk.energy.excel;
import lombok.Data;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import java.io.Serializable;
import java.io.Serial;
/**
* 能耗目标表 Excel实体类
*
* @author BladeX
* @since 2026-03-02
*/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class BsEnergyTargetWaterExcel implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 年份
*/
@ColumnWidth(50)
@ExcelProperty("年份")
private String year;
/**
* 用水目标(L/d)
*/
@ColumnWidth(50)
@ExcelProperty("用水目标(L/d㎡)")
private BigDecimal target;
}

@ -0,0 +1,26 @@
package org.springblade.desk.energy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.energy.pojo.entity.BsEnergyCoreUseEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyCoreUseVO;
import java.util.List;
/**
* 水电能耗记录表 Mapper 接口
*
* @author BladeX
* @since 2026-04-16
*/
public interface BsEnergyCoreUseMapper extends BaseMapper<BsEnergyCoreUseEntity> {
/**
* 自定义分页
*
* @param page 分页参数
* @param bsEnergyCoreUse 查询参数
* @return List<BsEnergyCoreUseVO>
*/
List<BsEnergyCoreUseVO> selectBsEnergyCoreUsePage(IPage<BsEnergyCoreUseVO> page, BsEnergyCoreUseVO bsEnergyCoreUse);
}

@ -0,0 +1,35 @@
package org.springblade.desk.energy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.desk.energy.pojo.entity.BsEnergyHistoryRecEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyHistoryRecVO;
import java.util.List;
/**
* iot水电能耗历史记录表 Mapper 接口
*
* @author BladeX
* @since 2026-04-17
*/
public interface BsEnergyHistoryRecMapper extends BaseMapper<BsEnergyHistoryRecEntity> {
/**
* 自定义分页
*
* @param page 分页参数
* @param bsEnergyHistoryRec 查询参数
* @return List<BsEnergyHistoryRecVO>
*/
List<BsEnergyHistoryRecVO> selectBsEnergyHistoryRecPage(IPage<BsEnergyHistoryRecVO> page, BsEnergyHistoryRecVO bsEnergyHistoryRec);
/**
* 自定义查询
*
* @param bsEnergyHistoryRec 查询参数
* @return List<BsEnergyHistoryRecVO>
*/
List<BsEnergyHistoryRecVO> selectBsEnergyHistoryRec(BsEnergyHistoryRecVO bsEnergyHistoryRec);
}

@ -27,7 +27,7 @@ package org.springblade.desk.energy.mapper;
import org.springblade.desk.energy.pojo.entity.BsEnergyQuotaEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyQuotaVO;
import org.springblade.desk.energy.excel.BsEnergyQuotaExcel;
import org.springblade.desk.energy.excel.BsEnergyQuotaWaterExcel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -58,6 +58,6 @@ public interface BsEnergyQuotaMapper extends BaseMapper<BsEnergyQuotaEntity> {
* @param queryWrapper 查询条件
* @return List<BsEnergyQuotaExcel>
*/
List<BsEnergyQuotaExcel> exportBsEnergyQuota(@Param("ew") Wrapper<BsEnergyQuotaEntity> queryWrapper);
List<BsEnergyQuotaWaterExcel> exportBsEnergyQuota(@Param("ew") Wrapper<BsEnergyQuotaEntity> queryWrapper);
}

@ -27,12 +27,13 @@ package org.springblade.desk.energy.mapper;
import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO;
import org.springblade.desk.energy.excel.BsEnergyTargetExcel;
import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 能耗目标表 Mapper 接口
@ -58,6 +59,13 @@ public interface BsEnergyTargetMapper extends BaseMapper<BsEnergyTargetEntity> {
* @param queryWrapper 查询条件
* @return List<BsEnergyTargetExcel>
*/
List<BsEnergyTargetExcel> exportBsEnergyTarget(@Param("ew") Wrapper<BsEnergyTargetEntity> queryWrapper);
List<BsEnergyTargetWaterExcel> exportBsEnergyTarget(@Param("ew") Wrapper<BsEnergyTargetEntity> queryWrapper);
/**
* 根据条件查询列表
* @param conMap
* @return
*/
List<BsEnergyTargetEntity> listByMap(Map<String, Object> conMap);
}

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.energy.mapper.BsEnergyCoreUseMapper">
<!-- 通用查询映射结果 -->
<resultMap id="bsEnergyCoreUseResultMap" type="org.springblade.desk.energy.pojo.vo.BsEnergyCoreUseVO">
<result column="ID" property="id"/>
<result column="TYPE" property="type"/>
<result column="WORK_CENTER_ID" property="workCenterId"/>
<result column="WORK_CENTER_NAME" property="workCenterName"/>
<result column="START_TIME" property="startTime"/>
<result column="END_TIME" property="endTime"/>
<result column="WORK_AREA" property="workArea"/>
<result column="QUO_TAP_WATER_NUM" property="quoTapWaterNum"/>
<result column="REAL_TAP_WATER_NUM" property="realTapWaterNum"/>
<result column="TOTAL_TAP_WATER_NUM" property="totalTapWaterNum"/>
<result column="QUO_PURE_WATER_NUM" property="quoPureWaterNum"/>
<result column="REAL_PURE_WATER_NUM" property="realPureWaterNum"/>
<result column="TOTAL_PURE_WATER_NUM" property="totalPureWaterNum"/>
<result column="QUO_ELECTRIC_NUM" property="quoElectricNum"/>
<result column="REAL_ELECTRIC_NUM" property="realElectricNum"/>
<result column="TOTAL_ELECTRIC_NUM" property="totalElectricNum"/>
<result column="IS_JUMBOTRON" property="isJumbotron"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="DATE" property="date"/>
</resultMap>
<select id="selectBsEnergyCoreUsePage" resultMap="bsEnergyCoreUseResultMap">
select t.*, TO_CHAR(t.CREATE_TIME, 'yyyy-mm-dd') as "date"
from BS_ENERGY_CORE_USE t
<where>
t.is_deleted = 0
<if test="bsEnergyCoreUse.type!=null">
and t.type = #{bsEnergyCoreUse.type}
</if>
<if test="bsEnergyCoreUse.startDate!=null">
and TRUNC(t.CREATE_TIME) <![CDATA[ >= ]]> TO_DATE(#{bsEnergyCoreUse.startDate},'yyyy-mm-dd')
</if>
<if test="bsEnergyCoreUse.endDate!=null">
and TRUNC(t.CREATE_TIME) <![CDATA[ <= ]]> TO_DATE(#{bsEnergyCoreUse.endDate},'yyyy-mm-dd')
</if>
<if test="bsEnergyCoreUse.workCenterId!=null">
and (
<foreach collection="bsEnergyCoreUse.workCenterId.split(',')"
item="wid"
separator=" or ">
t.work_center_id LIKE '%' || #{wid} || '%'
</foreach>
)
</if>
</where>
</select>
</mapper>

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.desk.energy.mapper.BsEnergyHistoryRecMapper">
<!-- 通用查询映射结果 -->
<resultMap id="bsEnergyHistoryRecResultMap" type="org.springblade.desk.energy.pojo.vo.BsEnergyHistoryRecVO">
<result column="ID" property="id"/>
<result column="DEVICE_ID" property="deviceId"/>
<result column="DEVICE_CODE" property="deviceCode"/>
<result column="READ_TAP" property="readTap"/>
<result column="READ_PURE" property="readPure"/>
<result column="READ_ELECTRIC" property="readElectric"/>
<result column="UPLOAD_TIME" property="uploadTime"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
<result column="CREATE_TIME" property="createTime"/>
<result column="UPDATE_USER" property="updateUser"/>
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="DEVICE_NAME" property="deviceName"/>
<result column="MAC_SPEC" property="macSpec"/>
<result column="USED" property="used"/>
</resultMap>
<select id="selectBsEnergyHistoryRecPage" resultMap="bsEnergyHistoryRecResultMap">
select * from BS_ENERGY_HISTORY_REC
<where>
is_deleted = 0
<if test="bsEnergyHistoryRec.createTime!=null">
and TRUNC(CREATE_TIME) = TRUNC(#{bsEnergyHistoryRec.createTime})
</if>
<if test="bsEnergyHistoryRec.deviceId!=null">
and DEVICE_ID = #{deviceId}
</if>
<if test="bsEnergyHistoryRec.deviceCode!=null">
and DEVICE_CODE = #{deviceCode}
</if>
</where>
order by UPLOAD_TIME
</select>
<select id="selectBsEnergyHistoryRec" resultMap="bsEnergyHistoryRecResultMap">
SELECT
t.*,
a.DEVICE_NAME,
a.MAC_SPEC,
a.USED
FROM BS_ENERGY_HISTORY_REC t
LEFT JOIN MES_EQUIPMENT a ON t.DEVICE_ID = a.id
<where>
t.is_deleted = 0
<if test="createTime!=null">
and TRUNC(t.CREATE_TIME) = TRUNC(#{createTime})
</if>
<if test="deviceId!=null">
and t.DEVICE_ID = #{deviceId}
</if>
<if test="deviceCode!=null">
and t.DEVICE_CODE = #{deviceCode}
</if>
</where>
order by t.UPLOAD_TIME
</select>
</mapper>

@ -31,7 +31,13 @@
<select id="selectBsEnergyMonitorPage" resultMap="bsEnergyMonitorResultMap">
select * from BS_ENERGY_MONITOR where is_deleted = 0
select * from BS_ENERGY_MONITOR
<where>
is_deleted = 0
<if test="bsEnergyMonitor.month!=null">
and month = #{bsEnergyMonitor.month}
</if>
</where>
</select>

@ -24,11 +24,29 @@
<select id="selectBsEnergyQuotaPage" resultMap="bsEnergyQuotaResultMap">
select * from BS_ENERGY_QUOTA where is_deleted = 0
select * from BS_ENERGY_QUOTA
<where>
is_deleted = 0
<if test="bsEnergyQuota.type!=null">
and type = #{bsEnergyQuota.type}
</if>
<if test="bsEnergyQuota.workCenterId!=null">
and (
<foreach collection="bsEnergyQuota.workCenterId.split(',')"
item="wid"
separator=" or ">
work_center_id LIKE '%' || #{wid} || '%'
</foreach>
)
</if>
<if test="bsEnergyQuota.date!=null">
and "DATE" = #{bsEnergyQuota.date}
</if>
</where>
</select>
<select id="exportBsEnergyQuota" resultType="org.springblade.desk.energy.excel.BsEnergyQuotaExcel">
<select id="exportBsEnergyQuota" resultType="org.springblade.desk.energy.excel.BsEnergyQuotaWaterExcel">
SELECT * FROM BS_ENERGY_QUOTA ${ew.customSqlSegment}
</select>

@ -7,7 +7,7 @@
<result column="ID" property="id"/>
<result column="TYPE" property="type"/>
<result column="MONTH" property="month"/>
<result column="DATE" property="date"/>
<!-- <result column="DATE" property="date"/>-->
<result column="TARGET" property="target"/>
<result column="CREATE_USER" property="createUser"/>
<result column="CREATE_DEPT" property="createDept"/>
@ -16,16 +16,54 @@
<result column="UPDATE_TIME" property="updateTime"/>
<result column="STATUS" property="status"/>
<result column="IS_DELETED" property="isDeleted"/>
<result column="QUARTER" property="quarter"/>
</resultMap>
<select id="selectBsEnergyTargetPage" resultMap="bsEnergyTargetResultMap">
select * from BS_ENERGY_TARGET where is_deleted = 0
select * from BS_ENERGY_TARGET
<where>
is_deleted = 0
<if test="bsEnergyTarget.type!=null">
and type = #{bsEnergyTarget.type}
</if>
<if test="bsEnergyTarget.year!=null">
and year = #{bsEnergyTarget.year}
</if>
<if test="bsEnergyTarget.quarter!=null">
and quarter = #{bsEnergyTarget.quarter}
</if>
<if test="bsEnergyTarget.status!=null">
and status = #{bsEnergyTarget.status}
</if>
</where>
</select>
<select id="exportBsEnergyTarget" resultType="org.springblade.desk.energy.excel.BsEnergyTargetExcel">
<select id="exportBsEnergyTarget" resultType="org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel">
SELECT * FROM BS_ENERGY_TARGET ${ew.customSqlSegment}
</select>
<select id="listByMap" resultType="org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity">
select ID,TYPE,MONTH,YEAR,TARGET,CASE WHEN QUARTER = 1 THEN '第一季度' WHEN QUARTER = 2 THEN '第二季度' WHEN QUARTER = 3 THEN '第三季度' WHEN QUARTER = 4 THEN '第四季度' ELSE '' END AS QUARTER
FROM BS_ENERGY_TARGET
<where>
<if test="year!=null">
and YEAR = #{year}
</if>
<if test="month!=null">
and MONTH = #{month}
</if>
<if test="quarter!=null">
and QUARTER = #{quarter}
</if>
<if test="type!=null">
and TYPE = #{type}
</if>
<if test="isDeleted!=null">
and IS_DELETED = #{isDeleted}
</if>
</where>
</select>
</mapper>

@ -31,7 +31,13 @@
<select id="selectBsPeakFlatValleyPage" resultMap="bsPeakFlatValleyResultMap">
select * from BS_PEAK_FLAT_VALLEY where is_deleted = 0
select * from BS_PEAK_FLAT_VALLEY
<where>
is_deleted = 0
<if test="bsPeakFlatValley.month">
and MONTH = #{bsPeakFlatValley.month}
</if>
</where>
</select>

@ -0,0 +1,110 @@
package org.springblade.desk.energy.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 水电能耗记录表 实体类
*
* @author BladeX
* @since 2026-04-16
*/
@Data
@TableName("BS_ENERGY_CORE_USE")
@Schema(description = "BsEnergyCoreUse对象")
@EqualsAndHashCode(callSuper = true)
public class BsEnergyCoreUseEntity extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 类型 1-用水 2-用电
*/
@Schema(description = "类型 1-用水 2-用电")
private String type;
/**
* 作业中心ID
*/
@Schema(description = "作业中心ID")
private String workCenterId;
/**
* 作业中心名称
*/
@Schema(description = "作业中心名称")
private String workCenterName;
/**
* 开始时间
*/
@Schema(description = "开始时间")
private Date startTime;
/**
* 结束时间
*/
@Schema(description = "结束时间")
private Date endTime;
/**
* 加工面积
*/
@Schema(description = "加工面积")
private BigDecimal workArea;
/**
* 定额单位面积自来水用水量
*/
@Schema(description = "定额单位面积自来水用水量")
private BigDecimal quoTapWaterNum;
/**
* 实际单位面积自来水用水量
*/
@Schema(description = "实际单位面积自来水用水量")
private BigDecimal realTapWaterNum;
/**
* 实际总自来水用水量
*/
@Schema(description = "实际总自来水用水量")
private BigDecimal totalTapWaterNum;
/**
* 定额单位面积纯水用水量
*/
@Schema(description = "定额单位面积纯水用水量")
private BigDecimal quoPureWaterNum;
/**
* 实际单位面积纯水用水量
*/
@Schema(description = "实际单位面积纯水用水量")
private BigDecimal realPureWaterNum;
/**
* 实际总纯水用水量
*/
@Schema(description = "实际总纯水用水量")
private BigDecimal totalPureWaterNum;
/**
* 定额单位面积用电量
*/
@Schema(description = "定额单位面积用电量")
private BigDecimal quoElectricNum;
/**
* 实际单位面积用电量
*/
@Schema(description = "实际单位面积用电量")
private BigDecimal realElectricNum;
/**
* 实际总用电量
*/
@Schema(description = "实际总用电量")
private BigDecimal totalElectricNum;
/**
* 是否大屏展示
*/
@Schema(description = "是否大屏展示")
private Integer isJumbotron;
}

@ -0,0 +1,54 @@
package org.springblade.desk.energy.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.math.BigDecimal;
import java.util.Date;
/**
* iot水电能耗历史记录表 实体类
*
* @author BladeX
* @since 2026-04-17
*/
@Data
@TableName("BS_ENERGY_HISTORY_REC")
@Schema(description = "BsEnergyHistoryRec对象")
@EqualsAndHashCode(callSuper = true)
public class BsEnergyHistoryRecEntity extends BaseEntity {
/**
* 设备ID
*/
@Schema(description = "设备ID")
private Long deviceId;
/**
* 设备编码
*/
@Schema(description = "设备编码")
private String deviceCode;
/**
* 自来水量读取值
*/
@Schema(description = "自来水量读取值")
private BigDecimal readTap;
/**
* 纯水量读取值
*/
@Schema(description = "纯水量读取值")
private BigDecimal readPure;
/**
* 电量读取值
*/
@Schema(description = "电量读取值")
private BigDecimal readElectric;
/**
* iot上传时间
*/
@Schema(description = "iot上传时间")
private Date uploadTime;
}

@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import java.math.BigDecimal;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial;
@ -44,7 +45,7 @@ import java.io.Serial;
@TableName("BS_ENERGY_MONITOR")
@Schema(description = "BsEnergyMonitor对象")
@EqualsAndHashCode(callSuper = true)
public class BsEnergyMonitorEntity extends TenantEntity {
public class BsEnergyMonitorEntity extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@ -53,7 +54,7 @@ public class BsEnergyMonitorEntity extends TenantEntity {
* 月份
*/
@Schema(description = "月份")
private Date month;
private String month;
/**
* 上月用水
*/

@ -25,6 +25,7 @@
*/
package org.springblade.desk.energy.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ -32,6 +33,7 @@ import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -58,7 +60,7 @@ public class BsEnergyQuotaEntity extends BaseEntity {
* 作业中心ID
*/
@Schema(description = "作业中心ID")
private Long workCenterId;
private String workCenterId;
/**
* 作业中心名称
*/
@ -78,21 +80,22 @@ public class BsEnergyQuotaEntity extends BaseEntity {
* 日期
*/
@Schema(description = "日期")
private Date date;
@TableField("\"DATE\"")
private String date;
/**
* 自来水用水量
*/
@Schema(description = "自来水用水量")
private Long tapWaterNum;
private BigDecimal tapWaterNum;
/**
* 纯水用水量
*/
@Schema(description = "纯水用水量")
private Long pureWaterNum;
private BigDecimal pureWaterNum;
/**
* 用电量
*/
@Schema(description = "用电量")
private Long electricNum;
private BigDecimal electricNum;
}

@ -59,17 +59,17 @@ public class BsEnergyTargetEntity extends BaseEntity {
* 月份
*/
@Schema(description = "月份")
private Date month;
private String month;
/**
*
*/
@Schema(description = "年")
private Date year;
/**
* 日期
*/
@Schema(description = "日期")
private String date;
private String year;
// /**
// * 日期
// */
// @Schema(description = "日期")
// private String date;
/**
* 目标
*/

@ -53,7 +53,7 @@ public class BsPeakFlatValleyEntity extends BaseEntity {
* 月份
*/
@Schema(description = "月份")
private Date month;
private String month;
/**
* 尖时一开始时间
*/

@ -0,0 +1,41 @@
package org.springblade.desk.energy.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.energy.pojo.entity.BsEnergyCoreUseEntity;
import java.io.Serial;
/**
* 水电能耗记录表 视图实体类
*
* @author BladeX
* @since 2026-04-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class BsEnergyCoreUseVO extends BsEnergyCoreUseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 开始日期
*/
@Schema(description = "开始日期")
private String startDate;
/**
* 结束日期
*/
@Schema(description = "结束日期")
private String endDate;
/**
* 日期
*/
@Schema(description = "日期")
private String date;
}

@ -0,0 +1,38 @@
package org.springblade.desk.energy.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.desk.energy.pojo.entity.BsEnergyHistoryRecEntity;
import java.io.Serial;
/**
* iot水电能耗历史记录表 视图实体类
*
* @author BladeX
* @since 2026-04-16
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class BsEnergyHistoryRecVO extends BsEnergyHistoryRecEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 设备名称
*/
@Schema(description = "设备名称")
private String deviceName;
/**
* 设备型号
*/
@Schema(description = "设备型号")
private String macSpec;
/**
* 服役状态
*/
@Schema(description = "服役状态")
private Long used;
}

@ -0,0 +1,36 @@
package org.springblade.desk.energy.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.energy.pojo.entity.BsEnergyCoreUseEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyCoreUseVO;
/**
* 水电能耗记录表 服务类
*
* @author BladeX
* @since 2026-04-17
*/
public interface IBsEnergyCoreUseService extends BaseService<BsEnergyCoreUseEntity> {
/**
* 自定义分页
* @param page 分页参数
* @param bsEnergyCoreUse 查询参数
* @return IPage<BsEnergyCoreUseVO>
*/
IPage<BsEnergyCoreUseVO> selectBsEnergyCoreUsePage(IPage<BsEnergyCoreUseVO> page, BsEnergyCoreUseVO bsEnergyCoreUse);
/**
* 更新用水用电记录
* @param type 类型
*/
void updateUsed(String type);
/**
* 保存iot用水用电历史记录
*/
void saveHistoryRec();
}

@ -0,0 +1,33 @@
package org.springblade.desk.energy.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.energy.pojo.entity.BsEnergyHistoryRecEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyHistoryRecVO;
import java.util.List;
/**
* 水电能耗记录表 服务类
*
* @author BladeX
* @since 2026-04-17
*/
public interface IBsEnergyHistoryRecService extends BaseService<BsEnergyHistoryRecEntity> {
/**
* 自定义分页
*
* @param page 分页参数
* @param bsEnergyHistoryRec 查询参数
* @return IPage<BsEnergyHistoryRecVO>
*/
IPage<BsEnergyHistoryRecVO> selectBsEnergyHistoryRecPage(IPage<BsEnergyHistoryRecVO> page, BsEnergyHistoryRecVO bsEnergyHistoryRec);
/**
* 自定义查询
* @param bsEnergyHistoryRec 查询参数
* @return List<BsEnergyHistoryRecVO>
*/
List<BsEnergyHistoryRecVO> selectBsEnergyHistoryRec(BsEnergyHistoryRecVO bsEnergyHistoryRec);
}

@ -28,7 +28,7 @@ package org.springblade.desk.energy.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.desk.energy.pojo.entity.BsEnergyQuotaEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyQuotaVO;
import org.springblade.desk.energy.excel.BsEnergyQuotaExcel;
import org.springblade.desk.energy.excel.BsEnergyQuotaWaterExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.util.List;
@ -56,6 +56,6 @@ public interface IBsEnergyQuotaService extends BaseService<BsEnergyQuotaEntity>
* @param queryWrapper 查询条件
* @return List<BsEnergyQuotaExcel>
*/
List<BsEnergyQuotaExcel> exportBsEnergyQuota(Wrapper<BsEnergyQuotaEntity> queryWrapper);
List<BsEnergyQuotaWaterExcel> exportBsEnergyQuota(Wrapper<BsEnergyQuotaEntity> queryWrapper);
}

@ -28,12 +28,13 @@ package org.springblade.desk.energy.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO;
import org.springblade.desk.energy.excel.BsEnergyTargetExcel;
import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 能耗目标表 服务类
@ -42,35 +43,45 @@ import java.util.List;
* @since 2026-03-02
*/
public interface IBsEnergyTargetService extends BaseService<BsEnergyTargetEntity> {
/**
* 自定义分页
*
* @param page 分页参数
* @param bsEnergyTarget 查询参数
* @return IPage<BsEnergyTargetVO>
*/
IPage<BsEnergyTargetVO> selectBsEnergyTargetPage(IPage<BsEnergyTargetVO> page, BsEnergyTargetVO bsEnergyTarget);
/**
* 自定义分页
*
* @param page 分页参数
* @param bsEnergyTarget 查询参数
* @return IPage<BsEnergyTargetVO>
*/
IPage<BsEnergyTargetVO> selectBsEnergyTargetPage(IPage<BsEnergyTargetVO> page, BsEnergyTargetVO bsEnergyTarget);
/**
* 导出数据
*
* @param queryWrapper 查询条件
* @return List<BsEnergyTargetExcel>
*/
List<BsEnergyTargetExcel> exportBsEnergyTarget(Wrapper<BsEnergyTargetEntity> queryWrapper);
/**
* 导出数据
*
* @param queryWrapper 查询条件
* @return List<BsEnergyTargetExcel>
*/
List<BsEnergyTargetWaterExcel> exportBsEnergyTarget(Wrapper<BsEnergyTargetEntity> queryWrapper);
/**
* 根据月份获取用水目标
* @param month 月份
* @return 用水目标
*/
BigDecimal getWaterTargetByMonth(String month);
/**
* 根据月份获取用水目标
*
* @param month 月份
* @return 用水目标
*/
BigDecimal getWaterTargetByMonth(String month);
/**
* 根据月份获取用电目标
* @param month 月份
* @return 用电目标
*/
BigDecimal getElectricTargetByMonth(String month);
/**
* 根据月份获取用电目标
*
* @param month 月份
* @return 用电目标
*/
BigDecimal getElectricTargetByMonth(String month);
/**
* 根据条件查询列表
*
* @param conMap
* @return
*/
List<BsEnergyTargetEntity> listByMap(Map<String, Object> conMap);
}

@ -0,0 +1,287 @@
package org.springblade.desk.energy.service.impl;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.device.pojo.entity.EquipmentEntity;
import org.springblade.desk.device.service.IEquipmentService;
import org.springblade.desk.energy.mapper.BsEnergyCoreUseMapper;
import org.springblade.desk.energy.pojo.entity.BsEnergyCoreUseEntity;
import org.springblade.desk.energy.pojo.entity.BsEnergyHistoryRecEntity;
import org.springblade.desk.energy.pojo.entity.BsEnergyQuotaEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyCoreUseVO;
import org.springblade.desk.energy.pojo.vo.BsEnergyHistoryRecVO;
import org.springblade.desk.energy.service.IBsEnergyCoreUseService;
import org.springblade.desk.energy.service.IBsEnergyHistoryRecService;
import org.springblade.desk.energy.service.IBsEnergyQuotaService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 水电能耗记录表 服务实现类
*
* @author BladeX
* @since 2026-04-17
*/
@Service
public class BsEnergyCoreUseServiceImpl extends BaseServiceImpl<BsEnergyCoreUseMapper, BsEnergyCoreUseEntity> implements IBsEnergyCoreUseService {
@Resource
private IBsEnergyQuotaService bsEnergyQuotaService;
@Resource
private IBsEnergyHistoryRecService bsEnergyHistoryRecService;
@Resource
private IEquipmentService equipmentService;
@Resource
private RestTemplate httpClientTemplate;
private String timestamp = "timestamp", waterOne = "Water1", waterTwo = "Water2", waterThree = "Water3", waterFour = "Water4", readElectric = "ElectricPower", readElectric2 = "TotalElectricEnergyOfBX2", readElectric3 = "TotalElectricEnergyOfBX3";
@Value("${request.iotNew.url}")
private String iotNewUrl;
@Value("${request.iot.orgId}")
private String orgId;
@Value("${request.iot.systemId}")
private String systemId;
@Override
public IPage<BsEnergyCoreUseVO> selectBsEnergyCoreUsePage(IPage<BsEnergyCoreUseVO> page, BsEnergyCoreUseVO bsEnergyCoreUse) {
return page.setRecords(baseMapper.selectBsEnergyCoreUsePage(page, bsEnergyCoreUse));
}
@Override
public void updateUsed(String type) {
List<BsEnergyQuotaEntity> bsEnergyQuotaEntitys = bsEnergyQuotaService.list(new LambdaQueryWrapper<BsEnergyQuotaEntity>()
.eq(BsEnergyQuotaEntity::getType, type));
if (CollectionUtils.isEmpty(bsEnergyQuotaEntitys)) {
return;
}
// 时间处理
Date date = new Date();
LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
LocalDateTime minTime = LocalDateTime.of(yesterday, LocalTime.MIN);
LocalDateTime maxTime = LocalDateTime.of(yesterday, LocalTime.MAX);
Date startTime = Date.from(minTime.atZone(ZoneId.systemDefault()).toInstant());
Date endTime = Date.from(maxTime.atZone(ZoneId.systemDefault()).toInstant());
for (BsEnergyQuotaEntity bsEnergyQuotaEntity : bsEnergyQuotaEntitys) {
Long equipmentId = bsEnergyQuotaEntity.getEquipmentId();
EquipmentEntity equipment = equipmentService.getById(equipmentId);
if (equipment == null) {
continue;
}
BsEnergyHistoryRecVO params = new BsEnergyHistoryRecVO();
params.setCreateTime(startTime);
params.setDeviceCode(equipment.getDeviceCode());
List<BsEnergyHistoryRecVO> hrList = bsEnergyHistoryRecService.selectBsEnergyHistoryRec(params);
if (!CollectionUtils.isEmpty(hrList)) {
// 每日用自来水最大最小值
BigDecimal maxTa = hrList.get(hrList.size() - 1).getReadTap();
BigDecimal minTa = hrList.get(0).getReadTap();
// 每日用纯水最大最小值
BigDecimal maxPu = hrList.get(hrList.size() - 1).getReadPure();
BigDecimal minPu = hrList.get(0).getReadPure();
// 每日用电最大最小值
BigDecimal maxEl = hrList.get(hrList.size() - 1).getReadElectric();
BigDecimal minEl = hrList.get(0).getReadElectric();
this.createWorkCenterUse(bsEnergyQuotaEntity, maxTa.subtract(minTa), maxPu.subtract(minPu), maxEl.subtract(minEl), date, startTime, endTime, type);
}
}
}
@Override
public void saveHistoryRec() {
List<EquipmentEntity> equipments = equipmentService.list(new LambdaQueryWrapper<EquipmentEntity>().eq(EquipmentEntity::getIsDeleted, 0));
LocalDateTime now = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
LocalDateTime lastHour = now.minusHours(1);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String startTime = lastHour.format(fmt);
String endTime = now.format(fmt);
List<String> params = Arrays.asList("Water4", "Water3", "Water2", "Water1", "ElectricPower", "TotalElectricEnergyOfBX2", "TotalElectricEnergyOfBX2");
BsEnergyHistoryRecEntity bsEnergyHistoryRec;
JSONObject jsonObject;
for (EquipmentEntity equipment : equipments) {
List<JSONObject> eneUsed;
String deviceCode = equipment.getDeviceCode();
try {
eneUsed = this.getEneUsed(deviceCode, params, startTime, endTime);
} catch (Exception e) {
log.error("设备:" + deviceCode + "查询用水用电量接口调用失败!\n" + e.getMessage());
continue;
}
if (CollectionUtils.isEmpty(eneUsed)) {
continue;
}
jsonObject = eneUsed.get(eneUsed.size() - 1);
bsEnergyHistoryRec = new BsEnergyHistoryRecEntity();
bsEnergyHistoryRec.setDeviceId(equipment.getId());
bsEnergyHistoryRec.setDeviceCode(equipment.getDeviceCode());
// 读取自来水用量(如果存在自来水2则计算累加值)
if (jsonObject.get(waterThree) != null) {
bsEnergyHistoryRec.setReadTap(new BigDecimal(this.totalRead(jsonObject, waterOne, waterThree)));
} else {
bsEnergyHistoryRec.setReadTap(new BigDecimal(this.totalRead(jsonObject, waterOne)));
}
// 读取纯水用量(如果存在纯水2则计算累加值)
if (jsonObject.get(waterFour) != null) {
bsEnergyHistoryRec.setReadPure(new BigDecimal(this.totalRead(jsonObject, waterTwo, waterFour)));
} else {
bsEnergyHistoryRec.setReadPure(new BigDecimal(this.totalRead(jsonObject, waterTwo)));
}
// 读取电用量
bsEnergyHistoryRec.setReadElectric(new BigDecimal(this.totalRead(jsonObject, readElectric, readElectric2, readElectric3)));
// 读取上传时间
bsEnergyHistoryRec.setUploadTime(jsonObject.getDate(timestamp));
BsEnergyHistoryRecEntity last = bsEnergyHistoryRecService.getOne(new LambdaQueryWrapper<BsEnergyHistoryRecEntity>().eq(BsEnergyHistoryRecEntity::getDeviceCode, deviceCode).orderByDesc(BsEnergyHistoryRecEntity::getCreateTime).last("AND ROWNUM = 1"));
if (last != null && last.getId() != null) {
BigDecimal readElectric = last.getReadElectric(); // 电
BigDecimal readPure = last.getReadPure(); // 纯水
BigDecimal readTap = last.getReadTap();// 自来水
// 如果最新的自来水数据为空或者小于上一笔数据,直接改为上一笔数据
if (!(bsEnergyHistoryRec.getReadTap() != null && bsEnergyHistoryRec.getReadTap().compareTo(readTap) > 0)) {
bsEnergyHistoryRec.setReadTap(readTap);
}
// 如果最新的纯水数据为空或者小于上一笔数据,直接改为上一笔数据
if (!(bsEnergyHistoryRec.getReadPure() != null && bsEnergyHistoryRec.getReadPure().compareTo(readPure) > 0)) {
bsEnergyHistoryRec.setReadPure(readPure);
}
// 如果最新的电数据为空或者小于上一笔数据,直接改为上一笔数据
if (!(bsEnergyHistoryRec.getReadElectric() != null && bsEnergyHistoryRec.getReadElectric().compareTo(readElectric) > 0)) {
bsEnergyHistoryRec.setReadElectric(readElectric);
}
}
bsEnergyHistoryRecService.save(bsEnergyHistoryRec);
}
}
/**
* 创建作业中心用水用电记录
*
* @param bsEnergyQuota
* @param useTa
* @param usePu
* @param useEl
* @param date
* @param startTime
* @param endTime
* @param type
*/
private void createWorkCenterUse(BsEnergyQuotaEntity bsEnergyQuota, BigDecimal useTa, BigDecimal usePu, BigDecimal useEl, Date date, Date startTime, Date endTime, String type) {
String workCenterId = bsEnergyQuota.getWorkCenterId();
if (StringUtils.isEmpty(workCenterId)) {
return;
}
BigDecimal wcArea = new BigDecimal("0");
// TODO 作业面积
BigDecimal quotaEl = bsEnergyQuota.getElectricNum(); // 定额单位面积用电量
BigDecimal tapWater = bsEnergyQuota.getTapWaterNum(); // 定额自来水单位用量
BigDecimal pureWater = bsEnergyQuota.getPureWaterNum(); // 定额纯水单位用量
BigDecimal realUnitTa = new BigDecimal("0"); // 实际自来水单位用量
BigDecimal realUnitPu = new BigDecimal("0"); // 实际纯水单位用量
BigDecimal realUnitEl = new BigDecimal("0"); // 实际单位面积用电量
BsEnergyCoreUseEntity bsEnergyCoreUse = new BsEnergyCoreUseEntity();
if (!(wcArea.compareTo(BigDecimal.ZERO) == 0)) {
realUnitTa = useTa.divide(wcArea, 6, RoundingMode.HALF_UP);
realUnitPu = usePu.divide(wcArea, 6, RoundingMode.HALF_UP);
realUnitEl = useEl.divide(wcArea, 6, RoundingMode.HALF_UP);
}
bsEnergyCoreUse.setType(type);
bsEnergyCoreUse.setWorkCenterId(bsEnergyQuota.getWorkCenterId());
bsEnergyCoreUse.setWorkCenterName(bsEnergyQuota.getWorkCenterName());
bsEnergyCoreUse.setStartTime(startTime);
bsEnergyCoreUse.setEndTime(endTime);
bsEnergyCoreUse.setWorkArea(wcArea);
bsEnergyCoreUse.setQuoTapWaterNum(tapWater);
bsEnergyCoreUse.setQuoPureWaterNum(pureWater);
bsEnergyCoreUse.setQuoElectricNum(quotaEl);
bsEnergyCoreUse.setRealTapWaterNum(realUnitTa);
bsEnergyCoreUse.setRealPureWaterNum(realUnitPu);
bsEnergyCoreUse.setRealElectricNum(realUnitEl);
bsEnergyCoreUse.setTotalTapWaterNum(useTa);
bsEnergyCoreUse.setTotalPureWaterNum(usePu);
bsEnergyCoreUse.setTotalElectricNum(useEl);
bsEnergyCoreUse.setIsJumbotron(0);
this.save(bsEnergyCoreUse);
}
/**
* 获取iot用水用电记录
*
* @param deviceCode
* @param params
* @param startTime
* @param endTime
* @return
*/
private List<JSONObject> getEneUsed(String deviceCode, List<String> params, String startTime, String endTime) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
JSONObject object = new JSONObject();
object.put("orgId", orgId);
object.put("systemId", systemId);
object.put("params", params); // 设备对应的参数信息
object.put("deviceId", deviceCode); // 设备编码
object.put("startTime", startTime); // 开始时间(入炉)
object.put("endTime", endTime); // 结束时间(出炉)
HttpEntity<JSONObject> entity = new HttpEntity<>(object, headers);
ResponseEntity<JSONObject> responseEntity = null;
try {
responseEntity = httpClientTemplate.postForEntity(iotNewUrl + "/deviceForZhgd/deviceDataHistoryByParams", entity, JSONObject.class);
JSONObject result = responseEntity.getBody();
if (result != null && result.getInteger("code").equals(0)) {
List<JSONObject> jsonList = JSONArray.parseArray(result.getJSONArray("result").toJSONString(), JSONObject.class);
if (jsonList != null && jsonList.size() > 0) {
return jsonList;
}
} else {
log.error("获取用水用电量、烧结解绑获取数据接口调用失败!" + result.getString("message") + "设备编码" + deviceCode + "参数" + object);
}
} catch (Exception e) {
log.error("获取用水用电量、烧结解绑获取数据接口调用失败!" + e.getMessage() + "设备编码" + deviceCode + "参数" + object);
}
return null;
}
/**
* 合计读取值
*
* @param jsonObject
* @param args
* @return
*/
public Double totalRead(JSONObject jsonObject, String... args) {
Double total = 0d;
String waStr;
for (String s : args) {
waStr = jsonObject.getString(s);
total += org.apache.commons.lang3.StringUtils.isNotBlank(waStr) ? Double.valueOf(waStr) : 0;
}
return total;
}
}

@ -0,0 +1,31 @@
package org.springblade.desk.energy.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.energy.mapper.BsEnergyHistoryRecMapper;
import org.springblade.desk.energy.pojo.entity.BsEnergyHistoryRecEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyHistoryRecVO;
import org.springblade.desk.energy.service.IBsEnergyHistoryRecService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* iot水电能耗历史记录表 服务实现类
*
* @author BladeX
* @since 2026-04-17
*/
@Service
public class BsEnergyHistoryRecServiceImpl extends BaseServiceImpl<BsEnergyHistoryRecMapper, BsEnergyHistoryRecEntity> implements IBsEnergyHistoryRecService {
@Override
public IPage<BsEnergyHistoryRecVO> selectBsEnergyHistoryRecPage(IPage<BsEnergyHistoryRecVO> page, BsEnergyHistoryRecVO bsEnergyHistoryRec) {
return page.setRecords(baseMapper.selectBsEnergyHistoryRecPage(page, bsEnergyHistoryRec));
}
@Override
public List<BsEnergyHistoryRecVO> selectBsEnergyHistoryRec(BsEnergyHistoryRecVO bsEnergyHistoryRec) {
return baseMapper.selectBsEnergyHistoryRec(bsEnergyHistoryRec);
}
}

@ -27,7 +27,7 @@ package org.springblade.desk.energy.service.impl;
import org.springblade.desk.energy.pojo.entity.BsEnergyQuotaEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyQuotaVO;
import org.springblade.desk.energy.excel.BsEnergyQuotaExcel;
import org.springblade.desk.energy.excel.BsEnergyQuotaWaterExcel;
import org.springblade.desk.energy.mapper.BsEnergyQuotaMapper;
import org.springblade.desk.energy.service.IBsEnergyQuotaService;
import org.springframework.stereotype.Service;
@ -52,8 +52,8 @@ public class BsEnergyQuotaServiceImpl extends BaseServiceImpl<BsEnergyQuotaMappe
@Override
public List<BsEnergyQuotaExcel> exportBsEnergyQuota(Wrapper<BsEnergyQuotaEntity> queryWrapper) {
List<BsEnergyQuotaExcel> bsEnergyQuotaList = baseMapper.exportBsEnergyQuota(queryWrapper);
public List<BsEnergyQuotaWaterExcel> exportBsEnergyQuota(Wrapper<BsEnergyQuotaEntity> queryWrapper) {
List<BsEnergyQuotaWaterExcel> bsEnergyQuotaList = baseMapper.exportBsEnergyQuota(queryWrapper);
//bsEnergyQuotaList.forEach(bsEnergyQuota -> {
// bsEnergyQuota.setTypeName(DictCache.getValue(DictEnum.YES_NO, BsEnergyQuota.getType()));
//});

@ -29,7 +29,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springblade.desk.dashboard.utils.DateUtils;
import org.springblade.desk.energy.pojo.entity.BsEnergyTargetEntity;
import org.springblade.desk.energy.pojo.vo.BsEnergyTargetVO;
import org.springblade.desk.energy.excel.BsEnergyTargetExcel;
import org.springblade.desk.energy.excel.BsEnergyTargetWaterExcel;
import org.springblade.desk.energy.mapper.BsEnergyTargetMapper;
import org.springblade.desk.energy.service.IBsEnergyTargetService;
import org.springframework.stereotype.Service;
@ -39,6 +39,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* 能耗目标表 服务实现类
@ -56,8 +57,8 @@ public class BsEnergyTargetServiceImpl extends BaseServiceImpl<BsEnergyTargetMap
@Override
public List<BsEnergyTargetExcel> exportBsEnergyTarget(Wrapper<BsEnergyTargetEntity> queryWrapper) {
List<BsEnergyTargetExcel> bsEnergyTargetList = baseMapper.exportBsEnergyTarget(queryWrapper);
public List<BsEnergyTargetWaterExcel> exportBsEnergyTarget(Wrapper<BsEnergyTargetEntity> queryWrapper) {
List<BsEnergyTargetWaterExcel> bsEnergyTargetList = baseMapper.exportBsEnergyTarget(queryWrapper);
//bsEnergyTargetList.forEach(bsEnergyTarget -> {
// bsEnergyTarget.setTypeName(DictCache.getValue(DictEnum.YES_NO, BsEnergyTarget.getType()));
//});
@ -86,4 +87,9 @@ public class BsEnergyTargetServiceImpl extends BaseServiceImpl<BsEnergyTargetMap
}
return new BigDecimal(0);
}
@Override
public List<BsEnergyTargetEntity> listByMap(Map<String, Object> conMap){
return baseMapper.listByMap(conMap);
}
}

Loading…
Cancel
Save