From 8ccfcfa36de8168d65cd5b85d9b6eca37093fce0 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Wed, 15 Nov 2023 11:17:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B0=B4=E7=94=B5=E8=A1=A8?= =?UTF-8?q?=E6=9C=88=E5=BA=A6=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coal/base/mapper/CommonMapper.java | 47 +++++-- .../meterLog/service/MeterLogService.java | 17 ++- .../controller/MeterMonthLogController.java | 54 +++++++ .../dto/CreateMeterMonthLogDto.java | 24 ++++ .../meterMonthLog/dto/MeterMonthLogDto.java | 25 ++++ .../dto/UpdateMeterMonthLogDto.java | 24 ++++ .../entity/MeterMonthLogEntity.java | 29 ++++ .../mapper/MeterMonthLogMapper.java | 22 +++ .../repository/MeterMonthLogRepository.java | 12 ++ .../service/MeterMonthLogService.java | 132 ++++++++++++++++++ 10 files changed, 368 insertions(+), 18 deletions(-) create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/controller/MeterMonthLogController.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/dto/CreateMeterMonthLogDto.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/dto/MeterMonthLogDto.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/dto/UpdateMeterMonthLogDto.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/entity/MeterMonthLogEntity.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/mapper/MeterMonthLogMapper.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/repository/MeterMonthLogRepository.java create mode 100644 src/main/java/cn/lihongjie/coal/meterMonthLog/service/MeterMonthLogService.java diff --git a/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java b/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java index d5f682ca..06a8a10d 100644 --- a/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java +++ b/src/main/java/cn/lihongjie/coal/base/mapper/CommonMapper.java @@ -7,6 +7,8 @@ import cn.lihongjie.coal.department.entity.DepartmentEntity; import cn.lihongjie.coal.dictionary.entity.DictionaryEntity; import cn.lihongjie.coal.dictionary.entity.DictionaryItemEntity; import cn.lihongjie.coal.file.entity.FileEntity; +import cn.lihongjie.coal.meter.entity.MeterEntity; +import cn.lihongjie.coal.meterLog.entity.MeterLogEntity; import cn.lihongjie.coal.organization.entity.OrganizationEntity; import cn.lihongjie.coal.permission.entity.PermissionEntity; import cn.lihongjie.coal.resource.entity.ResourceEntity; @@ -48,7 +50,7 @@ public interface CommonMapper { if (StringUtils.isEmpty(id)) { return null; } - DictionaryEntity e = new DictionaryEntity(); + var e = new DictionaryEntity(); e.setId(id); return e; } @@ -58,7 +60,7 @@ public interface CommonMapper { if (StringUtils.isEmpty(id)) { return null; } - DictionaryItemEntity e = new DictionaryItemEntity(); + var e = new DictionaryItemEntity(); e.setId(id); return e; } @@ -68,7 +70,7 @@ public interface CommonMapper { if (StringUtils.isEmpty(id)) { return null; } - SysLogEntity e = new SysLogEntity(); + var e = new SysLogEntity(); e.setId(id); return e; } @@ -78,7 +80,7 @@ public interface CommonMapper { if (StringUtils.isEmpty(id)) { return null; } - OrganizationEntity e = new OrganizationEntity(); + var e = new OrganizationEntity(); e.setId(id); return e; } @@ -88,7 +90,7 @@ public interface CommonMapper { if (StringUtils.isEmpty(id)) { return null; } - PermissionEntity e = new PermissionEntity(); + var e = new PermissionEntity(); e.setId(id); return e; } @@ -98,7 +100,7 @@ public interface CommonMapper { if (StringUtils.isEmpty(id)) { return null; } - ResourceEntity e = new ResourceEntity(); + var e = new ResourceEntity(); e.setId(id); return e; } @@ -109,7 +111,7 @@ public interface CommonMapper { return null; } - RoleEntity e = new RoleEntity(); + var e = new RoleEntity(); e.setId(id); return e; } @@ -120,7 +122,7 @@ public interface CommonMapper { return null; } - ScriptEntity e = new ScriptEntity(); + var e = new ScriptEntity(); e.setId(id); return e; } @@ -131,7 +133,7 @@ public interface CommonMapper { return null; } - SupplierEntity e = new SupplierEntity(); + var e = new SupplierEntity(); e.setId(id); return e; } @@ -142,7 +144,7 @@ public interface CommonMapper { return null; } - CoalInfoEntity e = new CoalInfoEntity(); + var e = new CoalInfoEntity(); e.setId(id); return e; } @@ -153,18 +155,39 @@ public interface CommonMapper { return null; } - FileEntity e = new FileEntity(); + var e = new FileEntity(); e.setId(id); return e; } + default MeterEntity createMeter(String id) { + + if (StringUtils.isEmpty(id)) { + + return null; + } + var e = new MeterEntity(); + e.setId(id); + return e; + } + + default MeterLogEntity createMeterLog(String id) { + + if (StringUtils.isEmpty(id)) { + + return null; + } + var e = new MeterLogEntity(); + e.setId(id); + return e; + } default DepartmentEntity createDepartment(String id) { if (StringUtils.isEmpty(id)) { return null; } - DepartmentEntity e = new DepartmentEntity(); + var e = new DepartmentEntity(); e.setId(id); return e; } diff --git a/src/main/java/cn/lihongjie/coal/meterLog/service/MeterLogService.java b/src/main/java/cn/lihongjie/coal/meterLog/service/MeterLogService.java index 346d5d48..8729edc8 100644 --- a/src/main/java/cn/lihongjie/coal/meterLog/service/MeterLogService.java +++ b/src/main/java/cn/lihongjie/coal/meterLog/service/MeterLogService.java @@ -9,6 +9,7 @@ import cn.lihongjie.coal.meterLog.dto.UpdateMeterLogDto; import cn.lihongjie.coal.meterLog.entity.MeterLogEntity; import cn.lihongjie.coal.meterLog.mapper.MeterLogMapper; import cn.lihongjie.coal.meterLog.repository.MeterLogRepository; +import cn.lihongjie.coal.meterMonthLog.service.MeterMonthLogService; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -81,6 +82,8 @@ public class MeterLogService extends BaseService list(@RequestBody CommonQuery request) { + return this.service.list(request); + } +} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/CreateMeterMonthLogDto.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/CreateMeterMonthLogDto.java new file mode 100644 index 00000000..e5601279 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/CreateMeterMonthLogDto.java @@ -0,0 +1,24 @@ +package cn.lihongjie.coal.meterMonthLog.dto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; + +import lombok.Data; + +import org.hibernate.annotations.Comment; + +@Data +public class CreateMeterMonthLogDto extends OrgCommonDto { + private String meter; + + @Comment("抄表月份") + private java.time.LocalDate time; + + @Comment("抄表值") + private java.lang.Double value; + + @Comment("上次抄表值") + private java.lang.Double previousValue; + + @Comment("使用量") + private java.lang.Double usage; +} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/MeterMonthLogDto.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/MeterMonthLogDto.java new file mode 100644 index 00000000..8a0813e2 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/MeterMonthLogDto.java @@ -0,0 +1,25 @@ +package cn.lihongjie.coal.meterMonthLog.dto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; +import cn.lihongjie.coal.meter.dto.MeterDto; + +import lombok.Data; + +import org.hibernate.annotations.Comment; + +@Data +public class MeterMonthLogDto extends OrgCommonDto { + private MeterDto meter; + + @Comment("抄表月份") + private java.time.LocalDate time; + + @Comment("抄表值") + private java.lang.Double value; + + @Comment("上次抄表值") + private java.lang.Double previousValue; + + @Comment("使用量") + private java.lang.Double usage; +} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/UpdateMeterMonthLogDto.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/UpdateMeterMonthLogDto.java new file mode 100644 index 00000000..ec7742cd --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/dto/UpdateMeterMonthLogDto.java @@ -0,0 +1,24 @@ +package cn.lihongjie.coal.meterMonthLog.dto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; + +import lombok.Data; + +import org.hibernate.annotations.Comment; + +@Data +public class UpdateMeterMonthLogDto extends OrgCommonDto { + private String meter; + + @Comment("抄表月份") + private java.time.LocalDate time; + + @Comment("抄表值") + private java.lang.Double value; + + @Comment("上次抄表值") + private java.lang.Double previousValue; + + @Comment("使用量") + private java.lang.Double usage; +} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/entity/MeterMonthLogEntity.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/entity/MeterMonthLogEntity.java new file mode 100644 index 00000000..63afab69 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/entity/MeterMonthLogEntity.java @@ -0,0 +1,29 @@ +package cn.lihongjie.coal.meterMonthLog.entity; + +import cn.lihongjie.coal.base.entity.OrgCommonEntity; + +import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; + +import lombok.Data; + +import org.hibernate.annotations.Comment; + +@Data +@Entity +public class MeterMonthLogEntity extends OrgCommonEntity { + + @ManyToOne private cn.lihongjie.coal.meter.entity.MeterEntity meter; + + @Comment("抄表月份") + private java.time.LocalDate time; + + @Comment("抄表值") + private java.lang.Double value; + + @Comment("上次抄表值") + private java.lang.Double previousValue; + + @Comment("使用量") + private java.lang.Double usage; +} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/mapper/MeterMonthLogMapper.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/mapper/MeterMonthLogMapper.java new file mode 100644 index 00000000..44707103 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/mapper/MeterMonthLogMapper.java @@ -0,0 +1,22 @@ +package cn.lihongjie.coal.meterMonthLog.mapper; + +import cn.lihongjie.coal.base.mapper.BaseMapper; +import cn.lihongjie.coal.base.mapper.CommonMapper; +import cn.lihongjie.coal.meterMonthLog.dto.CreateMeterMonthLogDto; +import cn.lihongjie.coal.meterMonthLog.dto.MeterMonthLogDto; +import cn.lihongjie.coal.meterMonthLog.dto.UpdateMeterMonthLogDto; +import cn.lihongjie.coal.meterMonthLog.entity.MeterMonthLogEntity; + +import org.mapstruct.Mapper; +import org.mapstruct.control.DeepClone; + +@Mapper( + componentModel = org.mapstruct.MappingConstants.ComponentModel.SPRING, + uses = {CommonMapper.class}, + mappingControl = DeepClone.class) +public interface MeterMonthLogMapper + extends BaseMapper< + MeterMonthLogEntity, + MeterMonthLogDto, + CreateMeterMonthLogDto, + UpdateMeterMonthLogDto> {} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/repository/MeterMonthLogRepository.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/repository/MeterMonthLogRepository.java new file mode 100644 index 00000000..4d39d5ab --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/repository/MeterMonthLogRepository.java @@ -0,0 +1,12 @@ +package cn.lihongjie.coal.meterMonthLog.repository; + +import cn.lihongjie.coal.base.dao.BaseRepository; +import cn.lihongjie.coal.meter.entity.MeterEntity; +import cn.lihongjie.coal.meterMonthLog.entity.MeterMonthLogEntity; + +import org.springframework.stereotype.Repository; + +@Repository +public interface MeterMonthLogRepository extends BaseRepository { + long deleteByMeter(MeterEntity meter); +} diff --git a/src/main/java/cn/lihongjie/coal/meterMonthLog/service/MeterMonthLogService.java b/src/main/java/cn/lihongjie/coal/meterMonthLog/service/MeterMonthLogService.java new file mode 100644 index 00000000..b8d614ea --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/meterMonthLog/service/MeterMonthLogService.java @@ -0,0 +1,132 @@ +package cn.lihongjie.coal.meterMonthLog.service; + +import cn.lihongjie.coal.base.dto.CommonQuery; +import cn.lihongjie.coal.base.dto.IdRequest; +import cn.lihongjie.coal.base.service.BaseService; +import cn.lihongjie.coal.meter.entity.MeterEntity; +import cn.lihongjie.coal.meterMonthLog.dto.CreateMeterMonthLogDto; +import cn.lihongjie.coal.meterMonthLog.dto.MeterMonthLogDto; +import cn.lihongjie.coal.meterMonthLog.dto.UpdateMeterMonthLogDto; +import cn.lihongjie.coal.meterMonthLog.entity.MeterMonthLogEntity; +import cn.lihongjie.coal.meterMonthLog.mapper.MeterMonthLogMapper; +import cn.lihongjie.coal.meterMonthLog.repository.MeterMonthLogRepository; + +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.persistence.Query; + +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.convert.ConversionService; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class MeterMonthLogService + extends BaseService { + @Autowired private MeterMonthLogRepository repository; + + @Autowired private MeterMonthLogMapper mapper; + + @Autowired private ConversionService conversionService; + @PersistenceContext private EntityManager entityManager; + + public MeterMonthLogDto create(CreateMeterMonthLogDto request) { + MeterMonthLogEntity entity = mapper.toEntity(request); + + this.repository.save(entity); + return getById(entity.getId()); + } + + public MeterMonthLogDto update(UpdateMeterMonthLogDto request) { + MeterMonthLogEntity entity = this.repository.get(request.getId()); + this.mapper.updateEntity(entity, request); + + this.repository.save(entity); + + return getById(entity.getId()); + } + + public void delete(IdRequest request) { + this.repository.deleteAllById(request.getIds()); + } + + public MeterMonthLogDto getById(String id) { + MeterMonthLogEntity entity = repository.get(id); + + return mapper.toDto(entity); + } + + public Page list(CommonQuery query) { + Page page = + repository.findAll( + query.specification(conversionService), + PageRequest.of( + query.getPageNo(), + query.getPageSize(), + Sort.by(query.getOrders()))); + + return page.map(this.mapper::toDto); + } + + public void syncMeter(String meterId) { + + MeterEntity meter = new MeterEntity(); + meter.setId(meterId); + repository.deleteByMeter(meter); + + Query nativeQuery = + entityManager.createNativeQuery( + """ + + select DATE_TRUNC('month', time)::date as time, + meter_id, + sum(usage) as value + from t_meter_log + where meter_id = :meterId group by DATE_TRUNC('month', time)::date, meter_id + """); + + nativeQuery.setParameter("meterId", meterId); + + nativeQuery + .getResultList() + .forEach( + o -> { + Object[] result = (Object[]) o; + MeterMonthLogEntity entity = new MeterMonthLogEntity(); + entity.setMeter(meter); + entity.setTime((java.time.LocalDate) result[0]); + entity.setValue((Double) result[2]); + repository.save(entity); + }); + + Query nativeQuery2 = + entityManager.createNativeQuery( + """ + + + update t_meter_month_log ta + + + set previous_value = tb.previous_value, + usage = ta.value - tb.previous_value + + from ( + + select id, time, value, COALESCE(lag(value) over (order by time), value ) as previous_value from t_meter_month_log where meter_id = :meterId + ) tb + + where tb.id = ta.id + + + """); + + nativeQuery2.setParameter("meterId", meterId); + + nativeQuery2.executeUpdate(); + } +}