zxl
2026-03-25 0b39edb68acc67ed01fbfe5d31bfa776a1b17de1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package com.tievd.jyz.controller;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tievd.cube.commons.annotations.DictApi;
import com.tievd.cube.commons.base.CubeController;
import com.tievd.cube.commons.base.Result;
import com.tievd.cube.commons.utils.SystemContextUtil;
import com.tievd.cube.modules.system.model.LoginUser;
import com.tievd.jyz.entity.OilStatis;
import com.tievd.jyz.entity.TrafficFlow;
import com.tievd.jyz.entity.vo.DataStatisReqVo;
import com.tievd.jyz.entity.vo.StatDataTableVo;
import com.tievd.jyz.service.IOilRecordService;
import com.tievd.jyz.service.IOilStaticService;
import com.tievd.jyz.service.ITrafficFlowService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
@Slf4j
@DictApi
@RestController
@RequestMapping("/jyz/dataTable")
@Tag(name = "数据报表接口")
public class DataTableController extends CubeController<TrafficFlow, ITrafficFlowService> {
    
    @Autowired
    IOilStaticService oilStaticService;
    
    @Autowired
    IOilRecordService oilRecordService;
    
    @PostMapping("/statisOrgTop")
    @Operation(summary = "机构-统计top10数据")
    public Result<?> statisOrgTop(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        //流量top
        List<Map> traffic = oilRecordService.statisOrgTopTraffic(param);
        //加油
        List<Map> oilTop = oilRecordService.statisOrgTopOil(param);
        //销量
        List<Map> oilVolumeTop = oilRecordService.statisOrgTopVolume(param);
        
        JSONObject res = new JSONObject();
        res.put("trafficTop", traffic);
        res.put("oilTop", oilTop);
        res.put("oilVolumeTop", oilVolumeTop);
        return Result.ok(res);
    }
    
    @PostMapping("/statisTotal")
    @Operation(summary = "统计总数")
    public Result<StatDataTableVo> statisTotal(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        //总数
        StatDataTableVo total = oilRecordService.statisTotal(param);
        return Result.ok(total);
    }
 
    @PostMapping("/statisOilFreqCompare")
    @Operation(summary = "活动前后车辆加油频次统计")
    public Result<?> statisOilFreqCompare(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        List<Map> list = oilRecordService.statisOilFreqCompare(param);
        return Result.ok(list);
    }
    
    @GetMapping("/clientTop")
    @Operation(summary = "客户类型top10")
    public Result<?> clientTop(@RequestParam String orgCode) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        if(StringUtils.isBlank(orgCode)) orgCode = user.getOrgCode();
        Map<String, List> res = new HashMap<>();
        OilStatis statis = new OilStatis().setClientId(1).setOrgCode(orgCode);
        LambdaQueryWrapper<OilStatis> wrapper = new LambdaQueryWrapper(statis);
        wrapper.orderByDesc(OilStatis::getOilSum);
//        wrapper.likeRight(OilStatis::getOrgCode, orgCode);
        wrapper.last("limit 10");
        wrapper.select(OilStatis::getClientName, OilStatis::getLicenseNum, OilStatis::getOilSum, OilStatis::getOilCount);
        List<OilStatis> list1 = oilStaticService.list(wrapper);
        statis.setClientId(2);
        List<OilStatis> list2 = oilStaticService.list(wrapper);
        res.put("type1", list1);
        res.put("type2", list2);
        return Result.ok(res);
    }
    
    
    @PostMapping("/statisMidTable")
    @Operation(summary = "加油站统计-中部折线图(车型,加油位分析)")
    public Result<?> statisMidTable(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        //车型条形
        param.setType(1);
        JSONObject statModelBar = oilRecordService.statBar(param);
        //车位条形
        param.setType(2);
        JSONObject statPositionBar = oilRecordService.statBar(param);
        
        JSONObject res = new JSONObject();
        res.put("statModelBar", statModelBar);
        res.put("statPositionBar", statPositionBar);
        return Result.ok(res);
    }
    
    @PostMapping("/statFan")
    @Operation(summary = "加油站统计-中部报表(扇形图)")
    public Result<?> statFan(@RequestBody DataStatisReqVo param) {
        LoginUser user = SystemContextUtil.currentLoginUser();
        param.setOrgCodeIfnull(user.getOrgCode());
        JSONObject statFan = oilRecordService.statFan(param);
        return Result.ok(statFan);
    }
    
    @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);
        } else {
            statFan = oilRecordService.statTrend(param);
        }
        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);
    }
    
    
}