peng
2026-03-25 2e5c2bc2b7afc7926ec441ff083acd179cb29fc6
调整
4个文件已修改
144 ■■■■■ 已修改文件
jyz-base-start/src/main/java/com/tievd/jyz/controller/DataTableController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jyz-base-start/src/main/java/com/tievd/jyz/service/IOilRecordService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jyz-base-start/src/main/java/com/tievd/jyz/controller/DataTableController.java
@@ -127,6 +127,8 @@
    @PostMapping("/statTrend")
    @Operation(summary = "加油站统计-顶部条形图")
    public Result<?> statTrend(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        JSONObject statFan;
        if (param.getTrendType() == DataStatisReqVo.TrendType.CLIENT || param.getTrendType() == DataStatisReqVo.TrendType.LOSE_CLIENT) {
            statFan = oilRecordService.statTrendClient(param);
@@ -136,5 +138,14 @@
        return Result.ok(statFan);
    }
    
    @PostMapping("/statTrendDetail")
    @Operation(summary = "加油站统计-趋势分析明细")
    public Result<?> statTrendDetail(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        List<Map<String, Object>> list = oilRecordService.statTrendDetail(param);
        return Result.ok(list);
    }
    
}
jyz-base-start/src/main/java/com/tievd/jyz/entity/vo/DataStatisReqVo.java
@@ -58,6 +58,12 @@
    
    @Schema(description = "HOURS, DAYS, MONTHS")
    private StatUnit timeUnit = StatUnit.HOURS;
    @Schema(description = "趋势图点位时间")
    private String statTime;
    @Schema(description = "趋势图系列名称")
    private String seriesName;
    
    private DataStatisReqVo setTimeUnit(String timeUnit){
        this.timeUnit = StatUnit.valueOf(timeUnit);
jyz-base-start/src/main/java/com/tievd/jyz/service/IOilRecordService.java
@@ -50,4 +50,6 @@
    JSONObject statTrend(DataStatisReqVo param);
    
    JSONObject statTrendClient(DataStatisReqVo param);
    List<Map<String, Object>> statTrendDetail(DataStatisReqVo param);
}
jyz-base-start/src/main/java/com/tievd/jyz/service/impl/OilRecordServiceImpl.java
@@ -368,6 +368,131 @@
        res.put("lineData", lineDatas);
        return res;
    }
    @Override
    public List<Map<String, Object>> statTrendDetail(DataStatisReqVo param) {
        if (param.getTrendType() == null || param.getTimeUnit() == null || param.getStatTime() == null) {
            return new ArrayList<>();
        }
        DataStatisReqVo.TrendType trendType = param.getTrendType();
        DataStatisReqVo.StatUnit timeUnit = param.getTimeUnit();
        LocalDateTime[] timeRange = getTrendTimeRange(timeUnit);
        LocalDateTime timeLimit = timeRange[0];
        LocalDateTime timeLimitRight = timeRange[1];
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(timeUnit.statFormat());
        String statTime = param.getStatTime();
        List<Map<String, Object>> detailList = new ArrayList<>();
        if (trendType == DataStatisReqVo.TrendType.TRAFFIC) {
            LambdaQueryWrapper<TrafficFlow> wrapper = new LambdaQueryWrapper<TrafficFlow>()
                    .ge(TrafficFlow::getCaptureTime, timeLimit.toString())
                    .le(TrafficFlow::getCaptureTime, timeLimitRight.toString())
                    .likeRight(TrafficFlow::getOrgCode, param.getOrgCode())
                    .orderByDesc(TrafficFlow::getCaptureTime);
            List<TrafficFlow> list = trafficFlowMapper.selectList(wrapper);
            for (TrafficFlow trafficFlow : list) {
                if (!matchStatTime(trafficFlow.getCaptureTime().toLocalDateTime(), formatter, statTime)) {
                    continue;
                }
                Map<String, Object> row = new LinkedHashMap<>();
                row.put("id", trafficFlow.getId());
                row.put("captureTime", trafficFlow.getCaptureTime());
                row.put("carCount", trafficFlow.getCarCount());
                row.put("modelCode", trafficFlow.getModelCode());
                row.put("cameraCode", trafficFlow.getCameraCode());
                detailList.add(row);
            }
            return detailList;
        }
        if (trendType == DataStatisReqVo.TrendType.CLIENT || trendType == DataStatisReqVo.TrendType.LOSE_CLIENT) {
            LambdaQueryWrapper<OilStatis> wrapper = new LambdaQueryWrapper<OilStatis>()
                    .ge(OilStatis::getUpdateTimeSelf, timeLimit.toString())
                    .le(OilStatis::getUpdateTimeSelf, timeLimitRight.toString())
                    .likeRight(OilStatis::getOrgCode, param.getOrgCode())
                    .orderByDesc(OilStatis::getUpdateTimeSelf);
            List<OilStatis> list = oilStaticMapper.selectList(wrapper);
            for (OilStatis oilStatis : list) {
                if (!matchStatTime(oilStatis.getUpdateTimeSelf().toLocalDateTime(), formatter, statTime)) {
                    continue;
                }
                if (trendType == DataStatisReqVo.TrendType.CLIENT
                        && param.getSeriesName() != null
                        && !param.getSeriesName().equals(oilStatis.getClientName())) {
                    continue;
                }
                if (trendType == DataStatisReqVo.TrendType.LOSE_CLIENT
                        && (oilStatis.getClientId() == null || oilStatis.getClientId() != SystemConstant.LOSE_CLIENT_ID)) {
                    continue;
                }
                Map<String, Object> row = new LinkedHashMap<>();
                row.put("id", oilStatis.getId());
                row.put("updateTimeSelf", oilStatis.getUpdateTimeSelf());
                row.put("licenseNum", oilStatis.getLicenseNum());
                row.put("clientName", oilStatis.getClientName());
                row.put("oilCount", oilStatis.getOilCount());
                row.put("oilSum", oilStatis.getOilSum());
                detailList.add(row);
            }
            return detailList;
        }
        LambdaQueryWrapper<OilRecord> wrapper = new LambdaQueryWrapper<OilRecord>()
                .ge(OilRecord::getStartTime, timeLimit.toString())
                .le(OilRecord::getStartTime, timeLimitRight.toString())
                .likeRight(OilRecord::getOrgCode, param.getOrgCode())
                .orderByDesc(OilRecord::getStartTime);
        List<OilRecord> records = this.list(wrapper);
        for (OilRecord oilRecord : records) {
            if (!matchStatTime(oilRecord.getStartTime().toLocalDateTime(), formatter, statTime)) {
                continue;
            }
            if (trendType == DataStatisReqVo.TrendType.OIL
                    && (oilRecord.getBehavior() == null || oilRecord.getBehavior().intValue() != SystemConstant.BEHAVIOR_TYPE_OIL)) {
                continue;
            }
            if (trendType == DataStatisReqVo.TrendType.OIL_vOLUME
                    && (oilRecord.getBehavior() == null || oilRecord.getBehavior().intValue() != SystemConstant.BEHAVIOR_TYPE_OIL)) {
                continue;
            }
            Map<String, Object> row = new LinkedHashMap<>();
            row.put("id", oilRecord.getId());
            row.put("startTime", oilRecord.getStartTime());
            row.put("licenseNum", oilRecord.getLicenseNum());
            row.put("behavior", oilRecord.getBehavior());
            row.put("behaviorText", behaviorText(oilRecord.getBehavior()));
            row.put("oilPosition", oilRecord.getOilPosition());
            row.put("oilVolume", oilRecord.getOilVolume());
            row.put("spandTime", oilRecord.getSpandTime());
            detailList.add(row);
        }
        return detailList;
    }
    private LocalDateTime[] getTrendTimeRange(DataStatisReqVo.StatUnit timeUnit) {
        LocalDateTime timeLimit = LocalDateTime.now()
                .minus(timeUnit.value(), ChronoUnit.valueOf(timeUnit.name()))
                .with(timeUnit.initField(), 1);
        LocalDateTime timeLimitRight = LocalDateTime.now().with(timeUnit.initField(), 1);
        return new LocalDateTime[]{timeLimit, timeLimitRight};
    }
    private boolean matchStatTime(LocalDateTime time, DateTimeFormatter formatter, String statTime) {
        return formatter.format(time).equals(statTime);
    }
    private String behaviorText(Byte behavior) {
        if (behavior == null) {
            return "";
        }
        if (behavior.intValue() == SystemConstant.BEHAVIOR_TYPE_OIL) {
            return "加油";
        }
        if (behavior.intValue() == SystemConstant.BEHAVIOR_TYPE_TMP) {
            return "停靠";
        }
        return behavior.toString();
    }
    
    private <E> JSONObject  dataTransLists(
            List<E> dataList,