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> list(VinChargingOrderQuery query) { return R.ok(vinChargingOrderService.pageList(query)); } @PostMapping("/inner/charging-status") @ApiOperation("批量查询VIN充电状态") public R> getChargingVinStatus(@RequestBody List vinIds) { return R.ok(vinChargingOrderService.getChargingVinStatus(vinIds)); } @GetMapping("/applet/list") @ApiOperation(value = "当前用户VIN码充电订单分页", tags = {"小程序-充电记录"}) public R> 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> appletDetail(@RequestParam("id") Long id) { Map detail = vinChargingOrderService.appletDetail(id); return detail.isEmpty() ? R.fail("VIN码充电订单不存在或无权查看") : R.ok(detail); } @RequiresPermissions("/vinChargingOrder/list") @GetMapping("/summary") @ApiOperation("VIN码充电订单汇总") public R> summary(VinChargingOrderQuery query) { Map summary = vinChargingOrderService.summary(query); return R.ok(summary == null ? Collections.emptyMap() : summary); } @RequiresPermissions("/vinChargingOrder/detail") @GetMapping("/detail") @ApiOperation("VIN码充电订单详情") public R> detail(@RequestParam("chargingOrderId") Long chargingOrderId) { return R.ok(vinChargingOrderService.detail(chargingOrderId)); } @RequiresPermissions("/vinChargingOrder/detail") @GetMapping("/accounting-strategy") @ApiOperation("VIN码充电订单计费明细") public R> 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 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) { } } } }