puzhibing
4 天以前 a0e03b646f2c444b0f09687d24e9995112b99017
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
152
153
package com.ruoyi.order.controller;
 
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.core.utils.WebUtils;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.ruoyi.order.api.query.VinChargingOrderQuery;
import com.ruoyi.order.api.vo.ChargingOrderVO;
import com.ruoyi.order.api.vo.VinChargingStatusVO;
import com.ruoyi.order.dto.MyVinChargingOrderList;
import com.ruoyi.order.export.VinChargingOrderExport;
import com.ruoyi.order.service.TVinChargingOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
 
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
 
@RestController
@RequestMapping("/t-vin-charging-order")
@Api(tags = "管理后台-VIN码充电订单")
public class TVinChargingOrderController {
 
    @Resource
    private TVinChargingOrderService vinChargingOrderService;
 
    @RequiresPermissions("/vinChargingOrder/list")
    @GetMapping("/list")
    @ApiOperation("VIN码充电订单列表")
    public R<PageInfo<ChargingOrderVO>> list(VinChargingOrderQuery query) {
        return R.ok(vinChargingOrderService.pageList(query));
    }
 
    @PostMapping("/inner/charging-status")
    @ApiOperation("批量查询VIN充电状态")
    public R<List<VinChargingStatusVO>> getChargingVinStatus(@RequestBody List<Long> vinIds) {
        return R.ok(vinChargingOrderService.getChargingVinStatus(vinIds));
    }
 
    @GetMapping("/applet/list")
    @ApiOperation(value = "当前用户VIN码充电订单分页", tags = {"小程序-充电记录"})
    public R<PageInfo<MyVinChargingOrderList>> appletList(
            @RequestParam(value = "pageCurr", required = false) Integer pageCurr,
            @RequestParam(value = "pageSize", required = false) Integer pageSize) {
        return R.ok(vinChargingOrderService.pageAppletOrders(pageCurr, pageSize));
    }
 
    @GetMapping("/applet/detail")
    @ApiOperation(value = "当前用户VIN码充电订单详情", tags = {"小程序-充电记录"})
    public R<Map<String, Object>> appletDetail(@RequestParam("id") Long id) {
        Map<String, Object> detail = vinChargingOrderService.appletDetail(id);
        return detail.isEmpty() ? R.fail("VIN码充电订单不存在或无权查看") : R.ok(detail);
    }
 
    @RequiresPermissions("/vinChargingOrder/list")
    @GetMapping("/summary")
    @ApiOperation("VIN码充电订单汇总")
    public R<Map<String, Object>> summary(VinChargingOrderQuery query) {
        Map<String, Object> summary = vinChargingOrderService.summary(query);
        return R.ok(summary == null ? Collections.emptyMap() : summary);
    }
 
    @RequiresPermissions("/vinChargingOrder/detail")
    @GetMapping("/detail")
    @ApiOperation("VIN码充电订单详情")
    public R<Map<String, Object>> detail(@RequestParam("chargingOrderId") Long chargingOrderId) {
        return R.ok(vinChargingOrderService.detail(chargingOrderId));
    }
 
    @RequiresPermissions("/vinChargingOrder/detail")
    @GetMapping("/accounting-strategy")
    @ApiOperation("VIN码充电订单计费明细")
    public R<Map<String, Object>> accountingStrategy(@RequestParam("chargingOrderId") Long chargingOrderId) {
        return R.ok(Collections.singletonMap("list", vinChargingOrderService.accountingStrategyList(chargingOrderId)));
    }
 
    @RequiresPermissions("/chargingGun/end_charging")
    @PutMapping("/stopCharging")
    @ApiOperation("停止 VIN 码充电")
    @Log(title = "VIN码充电订单停止充电", businessType = BusinessType.OTHER)
    public AjaxResult stopCharging(@RequestParam("chargingOrderId") String chargingOrderId,
                                   @RequestParam("chargingGunId") Integer chargingGunId) {
        return vinChargingOrderService.stopCharging(chargingOrderId, chargingGunId);
    }
 
    @RequiresPermissions("/vinChargingOrder/export")
    @PutMapping("/export")
    @ApiOperation("VIN码充电订单导出")
    @Log(title = "VIN码充电订单导出", businessType = BusinessType.EXPORT)
    public void export(@RequestBody VinChargingOrderQuery query) {
        List<VinChargingOrderExport> exports = new ArrayList<>();
        for (ChargingOrderVO order : vinChargingOrderService.exportList(query)) {
            VinChargingOrderExport export = new VinChargingOrderExport();
            BeanUtils.copyProperties(order, export);
            export.setVin(order.getActualVin() != null ? order.getActualVin() : order.getExpectedVin());
            export.setPlateNum(order.getPlateNum());
            export.setStartTime(formatTime(order.getStartTime()));
            export.setEndTime(formatTime(order.getEndTime()));
            exports.add(export);
        }
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), VinChargingOrderExport.class, exports);
        writeWorkbook(workbook, "VIN码充电订单导出.xls");
    }
 
    private String formatTime(LocalDateTime time) {
        return time == null ? "" : DateUtils.localDateTimeToString(time);
    }
 
    private void writeWorkbook(Workbook workbook, String exportFileName) {
        HttpServletResponse response = WebUtils.response();
        response.setCharacterEncoding("utf-8");
        ServletOutputStream outputStream = null;
        try {
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(exportFileName, "utf-8"));
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
            outputStream = response.getOutputStream();
            workbook.write(outputStream);
        } catch (IOException e) {
            throw new IllegalStateException("导出VIN码充电订单失败", e);
        } finally {
            try {
                workbook.close();
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException ignored) {
            }
        }
    }
}