diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderExportVo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderExportVo.java new file mode 100644 index 0000000..724fd96 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderExportVo.java @@ -0,0 +1,59 @@ +package com.evotech.hd.common.core.Dto.order; + +import com.evotech.hd.common.core.excel.Excel; +import com.evotech.hd.common.core.excel.handler.impl.OrderSourceExcelHandlerAdapter; +import com.evotech.hd.common.core.excel.handler.impl.OrderStatusExcelHandlerAdapter; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +/** + * OrderExportVo + * + * @author andy.shi + * @ClassName:OrderExportVo + * @date: 2026年02月10日 10:13 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class OrderExportVo { + + @Excel(name="序号", needMerge=true) + Integer serialNumber; + @Excel(name="订单编号", needMerge=true) + String orderNo; + @Excel(name="站点名称", needMerge=true) + String stationName; + @Excel(name="订单来源", needMerge=true, handler = OrderSourceExcelHandlerAdapter.class) + String orderSource; + @Excel(name="换电结果", needMerge=true, handler = OrderStatusExcelHandlerAdapter.class) + String orderType; + @Excel(name="车牌号", needMerge=true) + String plateNum; + @Excel(name="拆卸电池编号", needMerge=true) + String returnBatCode; + @Excel(name="拆卸电池SOC", needMerge=true) + String returnBatSoc; + @Excel(name="安装电池编号", needMerge=true) + String rentBatCode; + @Excel(name="安装电池SOC", needMerge=true) + String rentBatSoc; + @Excel(name="车辆进站时间", dateFormat = "yyyy-MM-dd HH:mm:ss", needMerge=true) + Date serviceTimeBegin; + @Excel(name="服务结束时间", dateFormat = "yyyy-MM-dd HH:mm:ss", needMerge=true) + Date serviceTimeEnd; + @Excel(name="服务耗时", needMerge=true) + String serviceDuration; + @Excel(name="换电开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss", needMerge=true) + Date startTime; + @Excel(name="换电结束时间", dateFormat = "yyyy-MM-dd HH:mm:ss", needMerge=true) + Date closeTime; + @Excel(name="换电耗时", needMerge=true) + String batteryDuration; + @Excel(name="流程是否完整", needMerge=true) + String processComplete; + @Excel(name="换电步骤") + List stepList; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderStepExportVo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderStepExportVo.java new file mode 100644 index 0000000..3278a7a --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderStepExportVo.java @@ -0,0 +1,25 @@ +package com.evotech.hd.common.core.Dto.order; + +import com.evotech.hd.common.core.excel.Excel; +import lombok.Data; + +import java.util.Date; + +/** + * OrderDetailExportVo + * + * @author andy.shi + * @ClassName:OrderDetailExportVo + * @date: 2026年02月10日 14:18 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class OrderStepExportVo { + + Integer step; + + @Excel(name="步骤") + String name; + @Excel(name="时间", dateFormat = "yyyy-MM-dd HH:mm:ss") + Date stepTime; +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java index 4b8b260..84c3d20 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderDao.java @@ -1,6 +1,8 @@ package com.evotech.hd.common.core.dao.cloud; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.common.core.Dto.order.OrderExportVo; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.common.core.Dto.home.*; import com.evotech.hd.common.core.Dto.request.HomeRequestDto; @@ -45,4 +47,7 @@ public interface OrderDao extends BaseMapper { List findOrderListByStatus(@Param("status") Integer status); List findBillList(@Param("companyCode") String companyCode, @Param("orderTimeEnd")String orderTimeEnd); + + + List findExportList(PageListSwapOrderRequest plsor); } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java index 55f7b39..c973df0 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/SwapBatteryStepEnum.java @@ -18,13 +18,13 @@ public enum SwapBatteryStepEnum implements BaseEnum{ INSTITUTIONS_FOR_CHINA(3, "对中机构"), - DISMANTLE_OLD_ELECTRICITY(4, "拆旧电"), + GET_NEW_ELECTRICITY(4, "取新电"), - DISCHARGE_OLD_ELECTRICITY(5, "放旧电"), + DISMANTLE_OLD_ELECTRICITY(5, "拆旧电"), - GET_NEW_ELECTRICITY(6, "取新电"), + INSTALL_NEW_ELECTRICITY(6, "装新电"), - INSTALL_NEW_ELECTRICITY(7, "装新电"), + DISCHARGE_OLD_ELECTRICITY(7, "放旧电"), COMPLETED(8, "完成"), diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/excel/handler/impl/OrderSourceExcelHandlerAdapter.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/excel/handler/impl/OrderSourceExcelHandlerAdapter.java new file mode 100644 index 0000000..1a89838 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/excel/handler/impl/OrderSourceExcelHandlerAdapter.java @@ -0,0 +1,35 @@ +package com.evotech.hd.common.core.excel.handler.impl; + +import com.evotech.hd.common.core.excel.handler.ExcelHandlerAdapter; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * OrderStatusExcelHandlerAdapter + * + * @author andy.shi + * @ClassName:OrderStatusExcelHandlerAdapter + * @date: 2026年02月11日 14:23 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public class OrderSourceExcelHandlerAdapter implements ExcelHandlerAdapter { + + @Override + public Object format(Object value, String[] args, Cell cell, Workbook wb) { + if(ObjectUtils.isNotEmpty(value)){ + switch (String.valueOf(value)){ + case "1": + return "小程序"; + case "2": + return "云端"; + case "3": + return "站端"; + default: + return ""; + } + } + return null; + } +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/excel/handler/impl/OrderStatusExcelHandlerAdapter.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/excel/handler/impl/OrderStatusExcelHandlerAdapter.java new file mode 100644 index 0000000..5b0bb94 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/excel/handler/impl/OrderStatusExcelHandlerAdapter.java @@ -0,0 +1,32 @@ +package com.evotech.hd.common.core.excel.handler.impl; + +import com.evotech.hd.common.core.enums.OrderStatusEnums; +import com.evotech.hd.common.core.excel.handler.ExcelHandlerAdapter; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * OrderStatusExcelHandlerAdapter + * + * @author andy.shi + * @ClassName:OrderStatusExcelHandlerAdapter + * @date: 2026年02月11日 14:23 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public class OrderStatusExcelHandlerAdapter implements ExcelHandlerAdapter { + + @Override + public Object format(Object value, String[] args, Cell cell, Workbook wb) { + if(ObjectUtils.isNotEmpty(value)){ + Integer val = Integer.valueOf(String.valueOf(value)); + for (OrderStatusEnums orderStatus : OrderStatusEnums.values()){ + if(orderStatus.getCode().equals(val)){ + return orderStatus.getName(); + } + } + } + return null; + } +} diff --git a/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/dtos/BatDataDto.java b/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/dtos/BatDataDto.java new file mode 100644 index 0000000..5d80969 --- /dev/null +++ b/base-commons/common-mongodb/src/main/java/com/evotech/hd/common/dtos/BatDataDto.java @@ -0,0 +1,26 @@ +package com.evotech.hd.common.dtos; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * 电池实时信息 + * @ClassName:BatData + * @date: 2025年04月30日 9:13 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class BatDataDto { + //电池编号 + String batCode; + //开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + Date beginTime; + //结束时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + Date endTime; +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java index 17b3778..50f99f9 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderSwapBatteryController.java @@ -156,4 +156,13 @@ public class OrderSwapBatteryController { public Result companyNativePay(@RequestBody NativePayVO prePay) { return orderService.companyNativePay(prePay); } + + + + @Operation(summary = "订单导出") + @PostMapping("/export") + @ApiOperationSupport(order = 6) + public void export(@ParameterObject PageListSwapOrderRequest plsor) { + orderService.export(plsor); + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java index ffd321d..64e43ad 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/test/TestController.java @@ -22,6 +22,7 @@ import com.evotech.hd.common.core.dao.cloud.OrderDao; import com.evotech.hd.common.core.dao.cloud.OrderDetailDao; import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; import com.evotech.hd.common.core.entity.order.Order; import com.evotech.hd.common.core.entity.order.OrderDetail; import com.evotech.hd.common.core.utils.Collections; @@ -74,6 +75,14 @@ public class TestController { @Autowired private OrderDetailDao orderDetailDao; + @PostMapping("/order/export") + public Result orderExport() { + PageListSwapOrderRequest params = new PageListSwapOrderRequest(); + params.setStationCode("LN-DL-005"); + orderService.export(params); + return new Result().success("搞定"); + } + @PostMapping("/mongodb/save") public Result mongodbSave() { mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}")); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryStepDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryStepDao.java index b874c00..3f22f43 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryStepDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderSwapBatteryStepDao.java @@ -1,7 +1,12 @@ package com.evotech.hd.cloud.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.common.core.Dto.order.OrderStepExportVo; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * @author zrb @@ -9,4 +14,6 @@ import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; */ public interface OrderSwapBatteryStepDao extends BaseMapper { + @Select(" select step_name as name, step, step_time as stepTime from hd_cloud_manage.yt_t_order_swap_battery_step where order_no=#{orderNo} order by step asc ") + public List findListByOrderNo(@Param("orderNo") String orderNo); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java index b250a04..94975f2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java @@ -35,6 +35,11 @@ public interface OrderService extends IService { * @return */ Result> pageList(PageListSwapOrderRequest plsor); + /*** + * 订单数据导出 + * @param plsor + */ + void export(PageListSwapOrderRequest plsor); /*** * 订单结算 * @param osb diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java index 50bb024..34e20ab 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryStepService.java @@ -1,9 +1,11 @@ package com.evotech.hd.cloud.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.common.core.Dto.order.OrderStepExportVo; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; import java.util.Date; +import java.util.List; /** * 换电步骤 @@ -16,4 +18,6 @@ import java.util.Date; public interface OrderSwapBatteryStepService extends IService { public Boolean addOrderSwapBatteryStepBySwapComplete(String orderNo, Integer step, Date stepTime); + + List findListByOrderNo(String orderNo); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java index e525d9e..20d630c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java @@ -33,9 +33,7 @@ import com.evotech.hd.cloud.utils.ExcelUtil; import com.evotech.hd.cloud.utils.ParamServiceUtils; import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; import com.evotech.hd.common.core.Dto.Result; -import com.evotech.hd.common.core.Dto.order.OrderBillListVo; -import com.evotech.hd.common.core.Dto.order.OrderDetailVo; -import com.evotech.hd.common.core.Dto.order.OrderListVo; +import com.evotech.hd.common.core.Dto.order.*; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.dao.cloud.OrderDao; import com.evotech.hd.common.core.dao.cloud.OrderDetailDao; @@ -610,6 +608,43 @@ public class OrderServiceImpl extends ServiceImpl implements Or } + @Override + public void export(PageListSwapOrderRequest plsor) { + + List resultList = getBaseMapper().findExportList(plsor); + Integer i = 1; + for (OrderExportVo orderExport : resultList){ + orderExport.setSerialNumber(i++); + //计算时间差额 + orderExport.setServiceDuration(betweenTime(orderExport.getServiceTimeBegin(), orderExport.getServiceTimeEnd())); + orderExport.setStepList(orderSwapBatteryStepService.findListByOrderNo(orderExport.getOrderNo())); + //检查是否流程完整 + orderExport.setProcessComplete((Collections.isNotEmpty(orderExport.getStepList()) && orderExport.getStepList().size() ==8) ? "是" : "否"); + if(Collections.isNotEmpty(orderExport.getStepList())){ + OrderStepExportVo start = orderExport.getStepList().stream().filter(data -> SwapBatteryStepEnum.INSTITUTIONS_FOR_CHINA.getCode().equals(data.getStep())).findFirst().orElse(null); + OrderStepExportVo end = orderExport.getStepList().stream().filter(data -> SwapBatteryStepEnum.COMPLETED.getCode().equals(data.getStep())).findFirst().orElse(null); + if(start != null && start.getStepTime() != null && end != null && end.getStepTime() != null){ + orderExport.setStartTime(start.getStepTime()); + orderExport.setCloseTime(end.getStepTime()); + orderExport.setBatteryDuration(betweenTime(start.getStepTime(), end.getStepTime())); + } + } + } + ExcelUtil util = new ExcelUtil(OrderExportVo.class); + util.exportExcel(SpringUtil.getResponse(), resultList,"换电订单导出"); + } + + static Long dividend = (long) (60*1000); + public static String betweenTime(Date start, Date end){ + if(start == null || end == null){ + return ""; + } + Long between = end.getTime()-start.getTime(); + long minute = between/dividend; + long second = between%dividend; + return minute+"分"+(second/1000)+"秒"; + } + public void settlementInProgress(List list, String outTradeNo, Integer payType){ //执行完导出后. 所有的订单信息,全部更新为结算中 AuthUser user = RedisPermissionUtils.getUser(); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java index a3f47df..51753e1 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryStepServiceImpl.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao; import com.evotech.hd.cloud.service.OrderSwapBatteryStepService; import com.evotech.hd.cloud.utils.components.HDStepDictComponent; +import com.evotech.hd.common.core.Dto.order.OrderStepExportVo; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.List; /** * 类 @@ -45,4 +47,9 @@ public class OrderSwapBatteryStepServiceImpl extends ServiceImpl findListByOrderNo(String orderNo) { + return getBaseMapper().findListByOrderNo(orderNo); + } } diff --git a/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml index b355f80..deb1985 100644 --- a/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml @@ -168,6 +168,47 @@ + + + +