|
|
@@ -1,6 +1,9 @@
|
|
|
package com.kym.service.miniapp.impl;
|
|
|
|
|
|
import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import cn.hutool.core.io.IoUtil;
|
|
|
+import cn.hutool.poi.excel.ExcelUtil;
|
|
|
+import cn.hutool.poi.excel.ExcelWriter;
|
|
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
@@ -14,11 +17,17 @@ import com.kym.entity.miniapp.ChargeOrder;
|
|
|
import com.kym.mapper.miniapp.ChargeOrderMapper;
|
|
|
import com.kym.service.miniapp.ChargeOrderService;
|
|
|
import com.kym.service.utils.KymCache;
|
|
|
+import jakarta.servlet.ServletOutputStream;
|
|
|
+import jakarta.servlet.http.HttpServletResponse;
|
|
|
+import lombok.SneakyThrows;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -70,11 +79,87 @@ public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, Charg
|
|
|
// 查询订单列表(订单编号,手机号,充电站,充电桩SN/短码,订单状态,建单时间,结算时间,充电电量,实付金额,付款状态)
|
|
|
var result = baseMapper.listChargeOrders(params);
|
|
|
var page = new PageBean<>(result);
|
|
|
- page.setList(result.stream().map(item -> item.setShortId(kymCache.getShortId(item.getConnectorId().substring(0, 15))).setStationName(kymCache.getStationName(item.getConnectorId()))).collect(Collectors.toList()));
|
|
|
+ page.setList(result.stream().map(item -> item.setShortId(kymCache.getShortId(item.getConnectorId())).setStationName(kymCache.getStationName(item.getStationId()))).collect(Collectors.toList()));
|
|
|
var map = baseMapper.statChargeOrders(params);
|
|
|
return page.setExtraData(map);
|
|
|
}
|
|
|
|
|
|
+ @SneakyThrows
|
|
|
+ @Override
|
|
|
+ public void exportCustomChargeOrders(CustomChargeOrdersQueryParam params, HttpServletResponse response) {
|
|
|
+
|
|
|
+ if (params.getConnectorId() != null) {
|
|
|
+ var connectorId = kymCache.getConnectorId(params.getConnectorId());
|
|
|
+ params.setConnectorId(connectorId);
|
|
|
+ }
|
|
|
+ // 判断数据权限
|
|
|
+ var adminStationId = kymCache.getAdminUserStationId(StpUtil.getLoginIdAsLong());
|
|
|
+ if (adminStationId != null) {
|
|
|
+ params.setStationId(adminStationId);
|
|
|
+ }
|
|
|
+ // 查询订单列表(订单编号,手机号,充电站,充电桩SN/短码,订单状态,建单时间,结算时间,充电电量,实付金额,付款状态)
|
|
|
+ var result = baseMapper.listChargeOrders(params);
|
|
|
+ result = result.stream().map(item -> item.setShortId(kymCache.getShortId(item.getConnectorId())).setStationName(kymCache.getStationName(item.getStationId()))).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // stationId,startChargeSeq,connectorId,startTime,endTime,totalPower,totalMoney,elecMoney,serviceMoney,orderStatus,chargeStatus,stopReason,invoiceStatus
|
|
|
+ var rows = result.stream().map(item -> {
|
|
|
+ var map = new HashMap<>();
|
|
|
+ map.put("stationId", item.getStationId());
|
|
|
+ map.put("startChargeSeq", item.getStartChargeSeq());
|
|
|
+ map.put("connectorId", item.getConnectorId());
|
|
|
+ map.put("startTime", item.getStartTime() == null ? "-" : item.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ map.put("endTime", item.getEndTime() == null ? "-" : item.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
|
|
|
+ map.put("totalPower", item.getTotalPower());
|
|
|
+ map.put("totalMoney", BigDecimal.valueOf(item.getTotalMoney()).divide(BigDecimal.valueOf(100)));
|
|
|
+ map.put("elecMoney", BigDecimal.valueOf(item.getElecMoney()).divide(BigDecimal.valueOf(100)));
|
|
|
+ map.put("serviceMoney", BigDecimal.valueOf(item.getServiceMoney()).divide(BigDecimal.valueOf(100)));
|
|
|
+ map.put("orderStatus", item.getOrderStatus());
|
|
|
+ map.put("chargeStatus", item.getChargeStatus());
|
|
|
+ return map;
|
|
|
+ }).toList();
|
|
|
+
|
|
|
+ // 通过工具类创建writer,默认创建xls格式
|
|
|
+ ExcelWriter writer = ExcelUtil.getWriter();
|
|
|
+
|
|
|
+ //自定义标题别名
|
|
|
+ writer.addHeaderAlias("stationId", "站点ID");
|
|
|
+ writer.addHeaderAlias("startChargeSeq", "充电订单号");
|
|
|
+ writer.addHeaderAlias("connectorId", "充电设备接口编号");
|
|
|
+ writer.addHeaderAlias("startTime", "充电开始时间");
|
|
|
+ writer.addHeaderAlias("endTime", "充电结束时间");
|
|
|
+ writer.addHeaderAlias("totalPower", "充电量(度)");
|
|
|
+ writer.addHeaderAlias("totalMoney", "累积总金额(元)");
|
|
|
+ writer.addHeaderAlias("elecMoney", "累积电费(元)");
|
|
|
+ writer.addHeaderAlias("serviceMoney", "累积服务费(元)");
|
|
|
+ writer.addHeaderAlias("orderStatus", "订单状态");
|
|
|
+ writer.addHeaderAlias("chargeStatus", "充电状态");
|
|
|
+
|
|
|
+ // TODO: 2023-09-25 抽公共导出工具
|
|
|
+
|
|
|
+ // 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之
|
|
|
+ writer.setOnlyAlias(true);
|
|
|
+ // 合并单元格后的标题行,使用默认标题样式 从0开始计算
|
|
|
+ writer.merge(10, "订单列表");
|
|
|
+ // 一次性写出内容,使用默认样式,强制输出标题
|
|
|
+ writer.write(rows, true);
|
|
|
+ // 自适应列宽 必须在列数据写出后调用
|
|
|
+ writer.autoSizeColumnAll();
|
|
|
+ //out为OutputStream,需要写出到的目标流
|
|
|
+ //response为HttpServletResponse对象
|
|
|
+ response.setContentType("application/vnd.ms-excel;charset=utf-8");
|
|
|
+ //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
|
|
|
+ var fileName = new String("订单列表.xls".getBytes("ISO-8859-1"), "utf-8");
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
|
|
+ ServletOutputStream out = response.getOutputStream();
|
|
|
+
|
|
|
+ writer.flush(out, true);
|
|
|
+ // 关闭writer,释放内存
|
|
|
+ writer.close();
|
|
|
+ //此处记得关闭输出Servlet流
|
|
|
+ IoUtil.close(out);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public Object orderDetail(String startChargeSeq) {
|
|
|
// TODO: 2023-08-22 订单详情(基本信息、收费信息) 上面接口貌似已经实现了
|
|
|
@@ -142,5 +227,4 @@ public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, Charg
|
|
|
return lambdaQuery().in(ChargeOrder::getStartChargeSeq, Arrays.stream(startChargeSeqs).toList()).list();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
}
|