diff --git a/src/main/java/cn/lihongjie/coal/smartCamCarData/controller/SmartCamCarDataController.java b/src/main/java/cn/lihongjie/coal/smartCamCarData/controller/SmartCamCarDataController.java index c1c72116..64057d0a 100644 --- a/src/main/java/cn/lihongjie/coal/smartCamCarData/controller/SmartCamCarDataController.java +++ b/src/main/java/cn/lihongjie/coal/smartCamCarData/controller/SmartCamCarDataController.java @@ -4,9 +4,7 @@ import cn.lihongjie.coal.annotation.OrgScope; import cn.lihongjie.coal.annotation.SysLog; import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; -import cn.lihongjie.coal.smartCamCarData.dto.CreateSmartCamCarDataDto; -import cn.lihongjie.coal.smartCamCarData.dto.SmartCamCarDataDto; -import cn.lihongjie.coal.smartCamCarData.dto.UpdateSmartCamCarDataDto; +import cn.lihongjie.coal.smartCamCarData.dto.*; import cn.lihongjie.coal.smartCamCarData.service.SmartCamCarDataService; import lombok.extern.slf4j.Slf4j; @@ -51,4 +49,11 @@ public class SmartCamCarDataController { public Page list(@RequestBody CommonQuery request) { return this.service.list(request); } + + + + @PostMapping("/compare") + public CompareResult compare(@RequestBody CompareRequest request) { + return this.service.compare(request); + } } diff --git a/src/main/java/cn/lihongjie/coal/smartCamCarData/dto/CompareRequest.java b/src/main/java/cn/lihongjie/coal/smartCamCarData/dto/CompareRequest.java new file mode 100644 index 00000000..7666925a --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/smartCamCarData/dto/CompareRequest.java @@ -0,0 +1,14 @@ +package cn.lihongjie.coal.smartCamCarData.dto; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.*; + +@Data +public class CompareRequest { + + private LocalDateTime start; + + private LocalDateTime end; +} diff --git a/src/main/java/cn/lihongjie/coal/smartCamCarData/dto/CompareResult.java b/src/main/java/cn/lihongjie/coal/smartCamCarData/dto/CompareResult.java new file mode 100644 index 00000000..579afdc9 --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/smartCamCarData/dto/CompareResult.java @@ -0,0 +1,31 @@ +package cn.lihongjie.coal.smartCamCarData.dto; + +import lombok.Data; + +import java.util.*; + +@Data +public class CompareResult { + + + private List carInfos; + + + @Data + public static class CarInfo { + + private String number; + + + private Integer camEntryCnt; + + private Integer camExitCnt; + + + private Integer weightEntryCnt; + + private Integer weightExitCnt; + + } + +} diff --git a/src/main/java/cn/lihongjie/coal/smartCamCarData/service/SmartCamCarDataService.java b/src/main/java/cn/lihongjie/coal/smartCamCarData/service/SmartCamCarDataService.java index 77281e17..0b7c12f2 100644 --- a/src/main/java/cn/lihongjie/coal/smartCamCarData/service/SmartCamCarDataService.java +++ b/src/main/java/cn/lihongjie/coal/smartCamCarData/service/SmartCamCarDataService.java @@ -3,14 +3,20 @@ package cn.lihongjie.coal.smartCamCarData.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.common.Ctx; import cn.lihongjie.coal.dbFunctions.DbFunctionService; import cn.lihongjie.coal.exception.BizException; -import cn.lihongjie.coal.smartCamCarData.dto.CreateSmartCamCarDataDto; -import cn.lihongjie.coal.smartCamCarData.dto.SmartCamCarDataDto; -import cn.lihongjie.coal.smartCamCarData.dto.UpdateSmartCamCarDataDto; +import cn.lihongjie.coal.smartCamCarData.dto.*; import cn.lihongjie.coal.smartCamCarData.entity.SmartCamCarDataEntity; import cn.lihongjie.coal.smartCamCarData.mapper.SmartCamCarDataMapper; import cn.lihongjie.coal.smartCamCarData.repository.SmartCamCarDataRepository; +import cn.lihongjie.coal.weightDeviceData.entity.WeightDeviceDataEntity; +import cn.lihongjie.coal.weightDeviceData.repository.WeightDeviceDataRepository; + +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import lombok.extern.slf4j.Slf4j; @@ -19,9 +25,14 @@ 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.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @Service @Slf4j @Transactional @@ -35,6 +46,105 @@ public class SmartCamCarDataService @Autowired private DbFunctionService dbFunctionService; + @Autowired WeightDeviceDataRepository weightDeviceDataRepository; + + public CompareResult compare(CompareRequest request) { + + List camData = + this.repository.findAll( + new Specification() { + @Override + public Predicate toPredicate( + Root root, + CriteriaQuery query, + CriteriaBuilder criteriaBuilder) { + + return criteriaBuilder.and( + criteriaBuilder.equal( + root.get("organizationId"), + Ctx.activeOrganizationId()), + criteriaBuilder.between( + root.get("entryTime"), + request.getStart(), + request.getEnd())); + } + }); + + List weightData = + weightDeviceDataRepository.findAll( + new Specification() { + @Override + public Predicate toPredicate( + Root root, + CriteriaQuery query, + CriteriaBuilder criteriaBuilder) { + + return criteriaBuilder.and( + criteriaBuilder.equal( + root.get("organizationId"), + Ctx.activeOrganizationId()), + criteriaBuilder.between( + root.get("ycgbTIme"), + request.getStart(), + request.getEnd())); + } + }); + + Map carInfoMap = new HashMap<>(); + + for (SmartCamCarDataEntity camDatum : camData) { + + if (carInfoMap.containsKey(camDatum.getNumber())) { + CompareResult.CarInfo carInfo = carInfoMap.get(camDatum.getNumber()); + + if (camDatum.getEntry() != null) { + + carInfo.setCamEntryCnt(carInfo.getCamEntryCnt() + 1); + } + + if (camDatum.getExit() != null) { + carInfo.setCamExitCnt(carInfo.getCamExitCnt() + 1); + } + + } else { + + CompareResult.CarInfo value = new CompareResult.CarInfo(); + value.setNumber(camDatum.getNumber()); + value.setCamEntryCnt(camDatum.getEntry() != null ? 1 : 0); + value.setCamExitCnt(camDatum.getExit() != null ? 1 : 0); + carInfoMap.put(camDatum.getNumber(), value); + } + } + + for (WeightDeviceDataEntity weightDatum : weightData) { + + if (carInfoMap.containsKey(weightDatum.getPlanNumber())) { + + CompareResult.CarInfo carInfo = carInfoMap.get(weightDatum.getPlanNumber()); + + if (weightDatum.getYcgbTIme() != null) { + carInfo.setWeightEntryCnt(carInfo.getWeightEntryCnt() + 1); + } + if (weightDatum.getEcgbTime() != null) { + carInfo.setWeightExitCnt(carInfo.getWeightExitCnt() + 1); + } + + } else { + + CompareResult.CarInfo value = new CompareResult.CarInfo(); + value.setNumber(weightDatum.getPlanNumber()); + value.setWeightEntryCnt(weightDatum.getYcgbTIme() != null ? 1 : 0); + value.setWeightExitCnt(weightDatum.getEcgbTime() != null ? 1 : 0); + carInfoMap.put(weightDatum.getPlanNumber(), value); + } + } + + CompareResult compareResult = new CompareResult(); + + compareResult.setCarInfos(carInfoMap.values().stream().toList()); + return compareResult; + } + public SmartCamCarDataDto create(CreateSmartCamCarDataDto request) { SmartCamCarDataEntity entity = mapper.toEntity(request);