From f44d78c94c179bbb248dd821df9a39342335214b Mon Sep 17 00:00:00 2001 From: andy <1042025947@qq.com> Date: Mon, 26 May 2025 16:45:35 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=94=B9=E7=89=88=E4=B8=AD--?= =?UTF-8?q?=E6=9C=AA=E5=AE=8C=E6=88=90=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../evotech/hd/common/core/Dto/Result.java | 15 + .../core/Dto/{ => device}/DeviceDto.java | 2 +- .../Dto/{result => }/home/HomeOrderInfo.java | 2 +- .../home/HomeOrderSwapBatteryAmountDto.java | 2 +- ...HomeOrderSwapBatteryHalfYearAmountDto.java | 2 +- .../home/HomeOrderSwapBatteryHalfYearDto.java | 2 +- .../HomeOrderSwapBatteryProportionDto.java | 2 +- .../hd/common/core/Dto/order/OrderListVo.java | 52 + .../core/Dto/request/order/OrderRequest.java | 53 + .../hd/common/core/constant/HDConstant.java | 139 +- .../core/dao/cloud/OrderSwapBatteryDao.java | 86 +- .../hd/common/core/entity/BaseEntity.java | 17 +- .../hd/common/core/entity/IdEntity.java | 39 + .../cloud/BatteryStationHdFeeStandard.java | 24 +- .../BatteryStationHdFeeStandardDetail.java | 25 +- .../core/entity/cloud/OrderSwapBattery.java | 324 +-- .../hd/common/core/enums/BaseEnum.java | 16 + .../common/core/enums/OrderStatusEnums.java | 21 +- .../hd/common/core/utils/Collections.java | 10 - .../hd/common/core/utils/CommonUtil.java | 14 +- .../evotech/hd/common/web/util/EnumUtils.java | 40 + .../hd/cloud/controller/HomeController.java | 12 +- .../hd/cloud/controller/dh/DHController.java | 2 +- .../controller/order/OrderPerController.java | 57 + .../order/OrderSwapBatteryController.java | 237 +- .../cloud/controller/test/TestController.java | 340 +-- .../com/evotech/hd/cloud/dao/OrderDao.java | 46 + .../evotech/hd/cloud/dao/OrderDetailDao.java | 16 + .../evotech/hd/cloud/entity/MessageMqtt.java | 21 +- .../hd/cloud/entity/order/BaseOrder.java | 59 + .../evotech/hd/cloud/entity/order/Order.java | 77 + .../hd/cloud/entity/order/OrderDetail.java | 108 + .../hd/cloud/entity/order/RechargeOrder.java | 21 + .../hd/cloud/entity/vo/HomeCompanyData.java | 2 +- .../evotech/hd/cloud/entity/vo/HomeData3.java | 2 +- .../hd/cloud/entity/vo/HomePlatformData2.java | 2 +- .../hd/cloud/entity/vo/HomePoxyData2.java | 4 +- .../hd/cloud/entity/vo/HomeStationData.java | 2 +- .../hd/cloud/entity/vo/MqttMessageParam.java | 33 + .../message/dto/newer/req/MqttResponse.java | 6 + .../message/handle/RequestMessageService.java | 63 +- ...questCancelOrderExchangeProcessorImpl.java | 51 + ...tRequestPreOrderExchangeProcessorImpl.java | 93 + ...questPushCarInfoExchangeProcessorImpl.java | 29 +- ...qttStateStationStateExchangeProcessor.java | 10 +- .../hd/cloud/service/DHDeviceService.java | 2 +- .../evotech/hd/cloud/service/HomeService.java | 33 +- .../hd/cloud/service/MessageMqttService.java | 7 +- .../hd/cloud/service/OrderService.java | 37 + .../service/OrderSwapBatteryPreService.java | 15 + .../service/OrderSwapBatteryService.java | 126 +- .../cloud/service/impl/BaseServiceImpl.java | 37 + .../service/impl/DHDeviceServiceImpl.java | 2 +- .../cloud/service/impl/HomeServiceImpl.java | 403 ++- .../service/impl/MessageMqttServiceImpl.java | 28 +- .../cloud/service/impl/OrderServiceImpl.java | 125 + .../impl/OrderSwapBatteryPreServiceImpl.java | 72 + .../impl/OrderSwapBatteryServiceImpl.java | 1444 +++++------ .../hd/cloud/task/OrderCostCalculateTask.java | 25 +- .../SwapOrderBasicFeeComponent.java | 172 +- .../src/main/resources/mapper/OrderMapper.xml | 156 ++ .../mapper/OrderSwapBatteryMapper.xml | 10 +- .../com/evotech/hd/cloud/AddTestData.java | 2208 ++++++++--------- 63 files changed, 4225 insertions(+), 2857 deletions(-) rename base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/{ => device}/DeviceDto.java (96%) rename base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/{result => }/home/HomeOrderInfo.java (93%) rename base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/{result => }/home/HomeOrderSwapBatteryAmountDto.java (87%) rename base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/{result => }/home/HomeOrderSwapBatteryHalfYearAmountDto.java (93%) rename base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/{result => }/home/HomeOrderSwapBatteryHalfYearDto.java (88%) rename base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/{result => }/home/HomeOrderSwapBatteryProportionDto.java (93%) create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java create mode 100644 base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java create mode 100644 base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/RechargeOrder.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java create mode 100644 cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java create mode 100644 cloud-manage-server/src/main/resources/mapper/OrderMapper.xml diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java index a3d1f95..d7501ec 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/Result.java @@ -37,6 +37,21 @@ public class Result implements Serializable { return this; } + public Result error(String errMsg) { + this.status = 1; + this.code = CodeMsg.ERROR.getCode(); + this.msg = errMsg; + return this; + } + + public Result error(String errMsg, T data) { + this.status = 1; + this.code = CodeMsg.ERROR.getCode(); + this.msg = errMsg; + this.data = data; + return this; + } + public Result error(CodeMsg codeMsg) { this.status = 1; this.code = codeMsg.getCode(); diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/DeviceDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/device/DeviceDto.java similarity index 96% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/DeviceDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/device/DeviceDto.java index 6a56218..f504236 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/DeviceDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/device/DeviceDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto; +package com.evotech.hd.common.core.Dto.device; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderInfo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderInfo.java similarity index 93% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderInfo.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderInfo.java index b7fde0e..d250650 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderInfo.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderInfo.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryAmountDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryAmountDto.java similarity index 87% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryAmountDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryAmountDto.java index 98f03d9..5a0a6d5 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryAmountDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryAmountDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearAmountDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearAmountDto.java similarity index 93% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearAmountDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearAmountDto.java index 0c078d8..57f9a07 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearAmountDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearAmountDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearDto.java similarity index 88% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearDto.java index 41f90b4..f472d30 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryHalfYearDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryHalfYearDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryProportionDto.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryProportionDto.java similarity index 93% rename from base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryProportionDto.java rename to base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryProportionDto.java index c7ac509..fe43f94 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/result/home/HomeOrderSwapBatteryProportionDto.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/home/HomeOrderSwapBatteryProportionDto.java @@ -1,4 +1,4 @@ -package com.evotech.hd.common.core.Dto.result.home; +package com.evotech.hd.common.core.Dto.home; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java new file mode 100644 index 0000000..db9c611 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/order/OrderListVo.java @@ -0,0 +1,52 @@ +package com.evotech.hd.common.core.Dto.order; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderListVo + * @date: 2025年05月16日 13:54 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@Schema(name = "订单列表") +public class OrderListVo { + + @Schema(description = "唯一标识") + private Integer pkId; + + @Schema(description = "订单编号") + private String orderNo; + + @Schema(name = "订单类型", description = "1=换电;2=充电") + private Integer orderType; + + @Schema(name = "车牌号") + private String plateNum; + + @Schema(name = "换电站") + private String stationName; + + @Schema(name = "预约人") + private String perName; + + @Schema(name = "订单时间") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date orderTime; + + @Schema(name = "订单状态", description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消, -1-退款") + private Integer orderStatus; + + @Schema(name = "交易编码", description = "第三方收款返回的唯一标识") + private String notifyOrderNo; + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java new file mode 100644 index 0000000..eb9d1b0 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/Dto/request/order/OrderRequest.java @@ -0,0 +1,53 @@ +package com.evotech.hd.common.core.Dto.request.order; + +import com.evotech.hd.common.core.entity.BasePageRequest; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderRequest + * @date: 2025年05月16日 15:28 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@Schema(name = "查询订单请求参数", hidden = true) +@EqualsAndHashCode(callSuper=false) +public class OrderRequest extends BasePageRequest { + + @Schema(description = "订单编码") + private String orderNo; + + @Schema(description = "车牌号") + private String plateNum; + + @Schema(description = "订单时间开始", example = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date orderTimeBegin; + + @Schema(description = "订单时间结束") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date orderTimeEnd; + + @Schema(description = "换电站编码") + private String stationCode; + + @Schema(description = "交易编码") + private String tradeNo; + + @Schema(description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消") + private String status; + + + +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java index da0c53c..0e6032d 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/constant/HDConstant.java @@ -2,6 +2,16 @@ package com.evotech.hd.common.core.constant; public interface HDConstant { + /*** + * 全局删除标识-已删除 + */ + final static Integer DELETE_YES = 1; + + /*** + * 全局删除标识-未删除 + */ + final static Integer DELETE_NO = 0; + /*** * 大华设备相关CONSTANT */ @@ -12,6 +22,108 @@ public interface HDConstant { } + /*** + * 订单相关参数 + */ + final class OrderConstant{ + + /*** + * 计费方式-ODO(里程数) + */ + public static final int FEE_TYPE_ODO = 1; + /*** + * 计费方式-SOC(电池百分比) + */ + public static final int FEE_TYPE_SOC = 2; + /*** + * 计费方式-电量 + */ + public static final int FEE_TYPE_DL = 3; + /*** + * 换电模式 全自动 + */ + public static final Integer CHANGE_MODE_AUTOMATIC = 1; + /*** + * 换电模式 半自动 + */ + public static final Integer CHANGE_MODE_AUTOMATIC_SEMI = 2; + /*** + * 换电模式 人工干预 + */ + public static final Integer CHANGE_MODE_ARTIFICIAL = 3; + /*** + * 换电车道 A + */ + public static final Integer CHANGE_LANE_A = 1; + /*** + * 换电车道 B + */ + public static final Integer CHANGE_LANE_B = 2; + + /*** + * 订单类型-充电 + */ + public static final Integer ORDER_TYPE_CHARGING = 2; + /*** + * 订单类型-换电 + */ + public static final Integer ORDER_TYPE_SWAP = 1; + + /*** + * 支付方式-支付宝支付 + */ + public static final String PAY_TYPE_ALI_PAY = "aliPay"; + /*** + * 支付方式-微信支付 + */ + public static final String PAY_TYPE_WECHAT_PAY = "wechatPay"; + /*** + * 支付方式-余额支付 + */ + public static final String PAY_TYPE_BALANCE_PAY = "balancePay"; + + + +// +// /*** +// * 订单状态-已创建 +// */ +// public static final Integer ORDER_STATUS_CREATE = 1; +// /*** +// * 订单状态-换电中 +// */ +// public static final Integer ORDER_STATUS_BATTERY_SWAPPING = 2; +// /*** +// * 订单状态-换电完成 +// */ +// public static final Integer ORDER_STATUS_BATTERY_SWAPPING_END = 3; +// /*** +// * 订单状态-充电中 +// */ +// public static final Integer ORDER_STATUS_CHARGING = 4; +// /*** +// * 订单状态-充电完成 +// */ +// public static final Integer ORDER_STATUS_CHARGING_END = 5; +// /*** +// * 订单状态-待结算 +// */ +// public static final Integer ORDER_STATUS_TO_BE_SETTLED = 6; +// /*** +// * 订单状态-已完成 +// */ +// public static final Integer ORDER_STATUS_END = 7; +// /*** +// * 订单状态-已取消 +// */ +// public static final Integer ORDER_STATUS_CLOSE = 9; +// /*** +// * 订单状态-退款 +// */ +// public static final Integer ORDER_STATUS_REFUND = -1; + + } + /*** * 大华设备相关CONSTANT */ @@ -33,7 +145,6 @@ public interface HDConstant { } - /*** * 权限相关CONSTANT */ @@ -113,14 +224,14 @@ public interface HDConstant { */ String JWT_PAYLOAD_KEY = "payload"; - + /** * jwt中添加的属性 */ String USER_ID_KEY = "uid"; String ROLE_CODE_KEY = "rcodes"; - - + + /** * 登陆验证码缓存key * hd:login:captcha: + captchaId @@ -132,37 +243,37 @@ public interface HDConstant { * key: hd:login:jti:token */ String LOGIN_CACHE_KEY_PREFIX = "hd:login:"; - + /** * 缓存系统token有效时间,s */ String HD_CACHE_TOKEN_EXP_KEY = "hd:cache:tokenExp"; - + /** * 资源权限类型 */ String RESOURCE_TYPE_PERM = "PER"; String RESOURCE_TYPE_MENU = "MENU"; - - + + /** * 交换数据非对称加密RSA秘钥前缀 */ String HD_STATION_SECRET_KEY_RSA_PREFIX = "hd:station:secretKey:rsa:"; - - + + /** - * 交换数据对称加密AES秘钥前缀 + * 交换数据对称加密AES秘钥前缀 */ String HD_STATION_SECRET_KEY_AES_PREFIX = "hd:station:secretKey:aes:"; - - + + /** * 微信服务请求头中权限验证字段 */ String WECHAT_SERVER_AUTHORIZATION_KEY = "WXUID"; String WECHAT_SERVER_TOKEN_KEY = "WXTOKEN"; - + /** * 微信登录缓存数据前缀 */ diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java index e9c2064..dc65d99 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/dao/cloud/OrderSwapBatteryDao.java @@ -1,43 +1,43 @@ -package com.evotech.hd.common.core.dao.cloud; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.evotech.hd.common.core.Dto.request.HomeRequestDto; -import com.evotech.hd.common.core.Dto.result.home.*; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.permission.DataScope; -import com.evotech.hd.common.core.permission.DataScopes; -import org.apache.ibatis.annotations.Param; - -import java.util.Date; -import java.util.List; - -/** - * @author zrb - * @since 2024-11-22 - */ -@DataScopes({ - @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), - @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), -}) -//@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"}) -public interface OrderSwapBatteryDao extends BaseMapper { - - - List homeFindProportionData(@Param("params") HomeRequestDto params); - - List homeFindAmountData(@Param("params") HomeRequestDto params); - - List homeFindHalfYearOrderData(@Param("params") HomeRequestDto params); - -// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE) - List homeFindHalfYearAmountData(@Param("params") HomeRequestDto params); - //因为站端不需要显示金额, 所有重新写一个 - List homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params); - - Long homeFindOrderCountData(@Param("date") Date date); - - Double homeFindOrderAmountData(@Param("date") Date date); - - List findOrderListByStatus(@Param("status") Integer status); -} +//package com.evotech.hd.common.core.dao.cloud; +// +//import com.baomidou.mybatisplus.core.mapper.BaseMapper; +//import com.evotech.hd.common.core.Dto.request.HomeRequestDto; +//import com.evotech.hd.common.core.Dto.result.home.*; +//import com.evotech.hd.common.core.constant.HDConstant; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +//import com.evotech.hd.common.core.permission.DataScope; +//import com.evotech.hd.common.core.permission.DataScopes; +//import org.apache.ibatis.annotations.Param; +// +//import java.util.Date; +//import java.util.List; +// +///** +// * @author zrb +// * @since 2024-11-22 +// */ +//@DataScopes({ +// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), +// @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), +//}) +////@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"}) +//public interface OrderSwapBatteryDao extends BaseMapper { +// +// +// List homeFindProportionData(@Param("params") HomeRequestDto params); +// +// List homeFindAmountData(@Param("params") HomeRequestDto params); +// +// List homeFindHalfYearOrderData(@Param("params") HomeRequestDto params); +// +//// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE) +// List homeFindHalfYearAmountData(@Param("params") HomeRequestDto params); +// //因为站端不需要显示金额, 所有重新写一个 +// List homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params); +// +// Long homeFindOrderCountData(@Param("date") Date date); +// +// Double homeFindOrderAmountData(@Param("date") Date date); +// +// List findOrderListByStatus(@Param("status") Integer status); +//} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java index 8d9e06d..e6e90e9 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/BaseEntity.java @@ -2,18 +2,12 @@ package com.evotech.hd.common.core.entity; import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; -import jakarta.validation.constraints.Min; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; -import java.io.Serializable; import java.util.Date; /** @@ -23,25 +17,16 @@ import java.util.Date; */ @Data @Schema(name = "BaseEntity", description = "基础实体类") -public class BaseEntity implements Serializable { +public class BaseEntity extends IdEntity { private static final long serialVersionUID = 1L; - @TableId(value = "pk_id", type = IdType.AUTO) - @Hidden - private Integer pkId; @Schema(description = "创建人", hidden = true) @TableField(fill = FieldFill.INSERT) private String creater; - @Schema(description = "创建时间", hidden = true) - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") - @TableField(fill = FieldFill.INSERT) - private Date ctime; - @Schema(description = "更新人", hidden = true) @TableField(fill = FieldFill.UPDATE) private String updater; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java new file mode 100644 index 0000000..0706709 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/IdEntity.java @@ -0,0 +1,39 @@ +package com.evotech.hd.common.core.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * 类 + * + * @ClassName:IdEntity + * @date: 2025年05月16日 11:08 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class IdEntity implements Serializable { + + + @TableId(value = "pk_id", type = IdType.AUTO) + @Hidden + private Integer pkId; + + + @Schema(description = "创建时间", hidden = true) + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(fill = FieldFill.INSERT) + private Date ctime; +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java index 2d9968a..c6597a8 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandard.java @@ -1,27 +1,19 @@ package com.evotech.hd.common.core.entity.cloud; -import com.baomidou.mybatisplus.annotation.IdType; +import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.evotech.hd.common.core.entity.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import cn.hutool.core.date.DatePattern; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; -import java.util.List; - -import org.springframework.format.annotation.DateTimeFormat; - import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import jakarta.validation.constraints.NotBlank; import lombok.Getter; import lombok.Setter; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + /** * @author zrb * @since 2024-10-17 @@ -44,6 +36,9 @@ public class BatteryStationHdFeeStandard extends BaseEntity implements Serializa @Schema(description = "换电站编码") private String stationName; + @Schema(description = "基本服务费") + private BigDecimal serviceFee; + @Schema(description = "开始日期", requiredMode = RequiredMode.REQUIRED, example = DatePattern.PURE_DATE_PATTERN) @NotBlank(message = "开始时间不能为空") private String dayBegin; @@ -61,6 +56,9 @@ public class BatteryStationHdFeeStandard extends BaseEntity implements Serializa @Schema(description = "每度电收费") private BigDecimal eachKwhFee; + + + @Schema(description = "正常换电服务费") private BigDecimal commonRemainFee; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java index 5f10ba3..d355b52 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationHdFeeStandardDetail.java @@ -1,26 +1,19 @@ package com.evotech.hd.common.core.entity.cloud; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; +import cn.hutool.core.date.DatePattern; import com.baomidou.mybatisplus.annotation.TableName; import com.evotech.hd.common.core.entity.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; - -import cn.hutool.core.date.DatePattern; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.time.LocalTime; -import java.util.Date; - -import org.springframework.format.annotation.DateTimeFormat; - import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalTime; /** * @author zrb @@ -42,6 +35,9 @@ public class BatteryStationHdFeeStandardDetail extends BaseEntity implements Ser @NotNull private Integer standardId; + @Schema(description = "服务费") + private BigDecimal serviceFee; + @Schema(description = "每公里收费") private BigDecimal eachKmFee; @@ -61,6 +57,5 @@ public class BatteryStationHdFeeStandardDetail extends BaseEntity implements Ser @DateTimeFormat(pattern = DatePattern.NORM_TIME_PATTERN) private LocalTime timeEnd; - @Schema(description = "谷段服务费") - private BigDecimal timeServiceFee; + } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java index 5202053..45f1ef1 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java @@ -1,162 +1,162 @@ -package com.evotech.hd.common.core.entity.cloud; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableName; -import com.evotech.hd.common.core.entity.BaseEntity; -import com.fasterxml.jackson.annotation.JsonFormat; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import org.springframework.format.annotation.DateTimeFormat; - -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - -/** - * @author zrb - * @since 2024-11-22 - */ -@Data -@TableName("hd_cloud_manage.yt_t_order_swap_battery") -@Schema(name = "换电订单信息表") -public class OrderSwapBattery extends BaseEntity implements Serializable { - - private static final long serialVersionUID = 1L; - - @Schema(description = "预约订单ID") - private Integer orderPreId; - - @Schema(description = "预约用户") - private String orderPreUid; - - @Schema(description = "预约用户名称") - private String orderPreUname; - - @Schema(description = "预约用户手机") - private String orderPrePhone; - - @Schema(description = "类型:1-换电,2-充电", requiredMode = RequiredMode.REQUIRED) - @NotNull(message = "订单类型不能为空") - private Integer orderType; - - @Schema(description = "订单编码", hidden = true) - private String orderNo; - - @Schema(description = "车牌号", requiredMode = RequiredMode.REQUIRED) - @NotBlank(message = "车牌号不能为空") - private String plateNum; - - @Schema(description = "订单时间", example = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") - private Date orderTime; - - @Schema(description = "换电站编码", requiredMode = RequiredMode.REQUIRED) - @NotBlank(message = "换电站编码不能为空") - private String stationCode; - - @Schema(description = "换电站名称", requiredMode = RequiredMode.REQUIRED) - @NotBlank(message = "换电站名称不能为空") - private String stationName; - - @Schema(description = "金额账号") - private String accountCode; - - @Schema(description = "订单金额") - private Integer amount; - - @Schema(description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消, -1-退款") - private Integer status; - - @Schema(description = "计算费用方式:1-ODO,2-SOC,3-按电量") - private Integer feeType; - - @Schema(description = "基础费用") - private BigDecimal basicFee; - - @Schema(description = "服务开始时间") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") - private Date serviceTimeBegin; - - @Schema(description = "服务结束时间") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") - private Date serviceTimeEnd; - - @Schema(description = "服务费") - private BigDecimal serviceFee; - - @Schema(description = "费用标准") - private String feeStandardJson; - @Schema(description = "费用标准详情") - @TableField(exist = false) - private BatteryStationHdFeeStandard feeStandardDetail; - - @Schema(description = "上次租赁电池时车辆里程") - private BigDecimal lastRentBatCarOdo; - - @Schema(description = "归还电池时车辆里程") - private BigDecimal nowReturnBatCarOdo; - - @Schema(description = "按ODO换电费") - private BigDecimal odoAmount; - - @Schema(description = "充电开始时间") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") - private Date chargeTimeBegin; - - @Schema(description = "充电结束时间") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") - private Date chargeTimeEnd; - - @Schema(description = "总充电量") - private BigDecimal electAmount; - - @Schema(description = "租借电池包仓位") - private Integer rentBatNo; - - @Schema(description = "租用电池包编码") - private String rentBatCode; - - @Schema(description = "租用电池包SOC") - private Integer rentBatSoc; - - @Schema(description = "归还电池包编码") - private String returnBatCode; - - @Schema(description = "归还电池包仓位") - private Integer returnBatNo; - - @Schema(description = "归还电池包SOC") - private Integer returnBatSoc; - - @Schema(description = "归还电池租出时soc") - private Integer returnBatRentSoc; - - @Schema(description = "归还电池租出的换电站编码") - private String returnBatRentStationCode; - - @Schema(description = "归还电池租出的换电站") - private String returnBatRentStationName; - - @Schema(description = "换电模式:1-全自动,2-半自动,3-人工干预 ") - private Integer changeMode; - - @Schema(description = "换电车道 1-A 车道;2-B 车道") - private Integer changeLane; - - @Schema(description = "删除状态:1-已删除,0-未删除", hidden = true) - private Integer delFlag; - - @Schema(description = "交易编码", hidden = true) - private String tradeNo; - - @Schema(description = "备注信息") - private String remark; -} +//package com.evotech.hd.common.core.entity.cloud; +// +//import com.baomidou.mybatisplus.annotation.TableField; +//import com.baomidou.mybatisplus.annotation.TableName; +//import com.evotech.hd.common.core.entity.BaseEntity; +//import com.fasterxml.jackson.annotation.JsonFormat; +//import io.swagger.v3.oas.annotations.media.Schema; +//import io.swagger.v3.oas.annotations.media.Schema.RequiredMode; +//import jakarta.validation.constraints.NotBlank; +//import jakarta.validation.constraints.NotNull; +//import lombok.Data; +//import org.springframework.format.annotation.DateTimeFormat; +// +//import java.io.Serializable; +//import java.math.BigDecimal; +//import java.util.Date; +// +///** +// * @author zrb +// * @since 2024-11-22 +// */ +//@Data +//@TableName("hd_cloud_manage.yt_t_order_swap_battery") +//@Schema(name = "换电订单信息表") +//public class OrderSwapBattery extends BaseEntity implements Serializable { +// +// private static final long serialVersionUID = 1L; +// +// @Schema(description = "预约订单ID") +// private Integer orderPreId; +// +// @Schema(description = "预约用户") +// private String orderPreUid; +// +// @Schema(description = "预约用户名称") +// private String orderPreUname; +// +// @Schema(description = "预约用户手机") +// private String orderPrePhone; +// +// @Schema(description = "类型:1-换电,2-充电", requiredMode = RequiredMode.REQUIRED) +// @NotNull(message = "订单类型不能为空") +// private Integer orderType; +// +// @Schema(description = "订单编码", hidden = true) +// private String orderNo; +// +// @Schema(description = "车牌号", requiredMode = RequiredMode.REQUIRED) +// @NotBlank(message = "车牌号不能为空") +// private String plateNum; +// +// @Schema(description = "订单时间", example = "yyyy-MM-dd HH:mm:ss") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") +// private Date orderTime; +// +// @Schema(description = "换电站编码", requiredMode = RequiredMode.REQUIRED) +// @NotBlank(message = "换电站编码不能为空") +// private String stationCode; +// +// @Schema(description = "换电站名称", requiredMode = RequiredMode.REQUIRED) +// @NotBlank(message = "换电站名称不能为空") +// private String stationName; +// +// @Schema(description = "金额账号") +// private String accountCode; +// +// @Schema(description = "订单金额") +// private Integer amount; +// +// @Schema(description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消, -1-退款") +// private Integer status; +// +// @Schema(description = "计算费用方式:1-ODO,2-SOC,3-按电量") +// private Integer feeType; +// +// @Schema(description = "基础费用") +// private BigDecimal basicFee; +// +// @Schema(description = "服务开始时间") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") +// private Date serviceTimeBegin; +// +// @Schema(description = "服务结束时间") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") +// private Date serviceTimeEnd; +// +// @Schema(description = "服务费") +// private BigDecimal serviceFee; +// +// @Schema(description = "费用标准") +// private String feeStandardJson; +// @Schema(description = "费用标准详情") +// @TableField(exist = false) +// private BatteryStationHdFeeStandard feeStandardDetail; +// +// @Schema(description = "上次租赁电池时车辆里程") +// private BigDecimal lastRentBatCarOdo; +// +// @Schema(description = "归还电池时车辆里程") +// private BigDecimal nowReturnBatCarOdo; +// +// @Schema(description = "按ODO换电费") +// private BigDecimal odoAmount; +// +// @Schema(description = "充电开始时间") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") +// private Date chargeTimeBegin; +// +// @Schema(description = "充电结束时间") +// @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") +// private Date chargeTimeEnd; +// +// @Schema(description = "总充电量") +// private BigDecimal electAmount; +// +// @Schema(description = "租借电池包仓位") +// private Integer rentBatNo; +// +// @Schema(description = "租用电池包编码") +// private String rentBatCode; +// +// @Schema(description = "租用电池包SOC") +// private Integer rentBatSoc; +// +// @Schema(description = "归还电池包编码") +// private String returnBatCode; +// +// @Schema(description = "归还电池包仓位") +// private Integer returnBatNo; +// +// @Schema(description = "归还电池包SOC") +// private Integer returnBatSoc; +// +// @Schema(description = "归还电池租出时soc") +// private Integer returnBatRentSoc; +// +// @Schema(description = "归还电池租出的换电站编码") +// private String returnBatRentStationCode; +// +// @Schema(description = "归还电池租出的换电站") +// private String returnBatRentStationName; +// +// @Schema(description = "换电模式:1-全自动,2-半自动,3-人工干预 ") +// private Integer changeMode; +// +// @Schema(description = "换电车道 1-A 车道;2-B 车道") +// private Integer changeLane; +// +// @Schema(description = "删除状态:1-已删除,0-未删除", hidden = true) +// private Integer delFlag; +// +// @Schema(description = "交易编码", hidden = true) +// private String tradeNo; +// +// @Schema(description = "备注信息") +// private String remark; +//} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java new file mode 100644 index 0000000..669fa56 --- /dev/null +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/BaseEnum.java @@ -0,0 +1,16 @@ +package com.evotech.hd.common.core.enums; + +/** + * 枚举 + * + * @ClassName:BaseEnum + * @date: 2025年05月19日 15:36 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface BaseEnum { + + K getKey(); + V getValue(); +} diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java index d4e01d2..d4ec4cc 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/enums/OrderStatusEnums.java @@ -1,10 +1,10 @@ package com.evotech.hd.common.core.enums; -public enum OrderStatusEnums { +public enum OrderStatusEnums implements BaseEnum { CREATE(1, "已创建"), - SWAP(2, "换电开始"), + SWAP(2, "换电中"), SWAPOVER(3, "换电完成"), @@ -16,7 +16,12 @@ public enum OrderStatusEnums { FINISH(7, "已完成"), - CANCLE(9, "已取消"); + CANCLE(9, "已取消"), + + REFUND(-1, "订单退款"), + + ; + Integer code; @@ -36,4 +41,14 @@ public enum OrderStatusEnums { this.name = name; } + + @Override + public Integer getKey() { + return this.code; + } + + @Override + public String getValue() { + return this.name; + } } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java index e67ef4c..cc372a6 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/Collections.java @@ -45,7 +45,6 @@ public class Collections implements Serializable{ /** * @DES 检查集合为空 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午2:14:43 * @methodName Collections.isEmpty * @param list @@ -59,7 +58,6 @@ public class Collections implements Serializable{ /** * @DES 检查集合不为空 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午2:15:07 * @methodName Collections.isNotEmpty * @param collection @@ -73,7 +71,6 @@ public class Collections implements Serializable{ /** * 将list进行分页 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月15日上午9:37:07 * @param 泛型, 根据传入的对对象类型,返回类型 * @param list 需要分组的集合 @@ -109,7 +106,6 @@ public class Collections implements Serializable{ /** * 创建对象 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月15日上午9:37:07 * @param * @return @@ -121,7 +117,6 @@ public class Collections implements Serializable{ /** * @DES 数组转对象 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午2:09:14 * @methodName Collections.asList * @param objs @@ -157,7 +152,6 @@ public class Collections implements Serializable{ /** * 去除集合的重复项 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:09:07 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param list1 去重的集合1 @@ -172,7 +166,6 @@ public class Collections implements Serializable{ /** * 去除集合的重复项 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:13:09 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param listArray 去重的集合数组 @@ -203,7 +196,6 @@ public class Collections implements Serializable{ /** * 获取重复数据 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:46:03 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param list1 查重的集合1 @@ -217,7 +209,6 @@ public class Collections implements Serializable{ /** * 获取重复数据 * @author Andy.shi - * @company 龙腾工作室 * @date 2020年9月24日上午9:44:30 * @param 泛型,字段的类型, 如果是对象, 请重写hashCode() 和 equals() * @param listArray 需要查重的集合数组 @@ -281,7 +272,6 @@ public class Collections implements Serializable{ /** * @DES 组装map数据对象 * @author andy.shi - * @company 龙腾工作室 * @createDate 2020年12月25日下午1:37:05 * @methodName MapLists.createMap * @param args diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java index 9bd1eca..d7f6269 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/utils/CommonUtil.java @@ -1,10 +1,12 @@ package com.evotech.hd.common.core.utils; -import java.util.Date; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.RandomUtil; +import org.springframework.util.ObjectUtils; + +import java.math.BigDecimal; +import java.util.Date; public class CommonUtil { @@ -47,6 +49,12 @@ public class CommonUtil { return prefix + "1100"; } - + + public static BigDecimal yuanToFen(BigDecimal yuan){ + if(ObjectUtils.isEmpty(yuan)){ + return new BigDecimal(0); + } + return yuan.multiply(new BigDecimal(100)); + } } diff --git a/base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java b/base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java new file mode 100644 index 0000000..efa7332 --- /dev/null +++ b/base-commons/common-web/src/main/java/com/evotech/hd/common/web/util/EnumUtils.java @@ -0,0 +1,40 @@ +package com.evotech.hd.common.web.util; + +import com.evotech.hd.common.core.enums.BaseEnum; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * + * 类 + * @ClassName:EnumUtils + * @date: 2025年05月19日 15:30 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +public class EnumUtils extends org.apache.commons.lang3.EnumUtils{ + + + public static , K, V> E getEnumProperty(final Class enumClass, final K k) { + List el = new ArrayList<>(Arrays.asList(enumClass.getEnumConstants())); + for (E e: el){ + if(e.getKey().equals(k)){ + return e; + } + } + return null; + } + public static , K,V> V getEnumPropertyValue(final Class enumClass, final K k) { + List el = new ArrayList<>(Arrays.asList(enumClass.getEnumConstants())); + for (E e: el){ + if(e.getKey().equals(k)){ + return e.getValue(); + } + } + return (V)"未知属性"; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java index f77af12..7c6c4e5 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/HomeController.java @@ -148,10 +148,10 @@ public class HomeController { // return homeService.homeData7(type); // } - - @Operation(hidden = true) - @GetMapping("/login/data") - public void loginData() { - homeService.loginData(); - } +// +// @Operation(hidden = true) +// @GetMapping("/login/data") +// public void loginData() { +// homeService.loginData(); +// } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java index b2ca8eb..b02ca79 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/dh/DHController.java @@ -2,7 +2,7 @@ package com.evotech.hd.cloud.controller.dh; import com.evotech.hd.cloud.service.DHDeviceService; import com.evotech.hd.common.core.Dto.Result; -import com.evotech.hd.common.core.Dto.DeviceDto; +import com.evotech.hd.common.core.Dto.device.DeviceDto; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java new file mode 100644 index 0000000..9ce61d6 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/order/OrderPerController.java @@ -0,0 +1,57 @@ +package com.evotech.hd.cloud.controller.order; + +import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.text.ParseException; +import java.util.List; + +/** + * 预约订单管理类 + * @ClassName:OrderPerController + * @date: 2025年05月16日 13:51 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Tag(name = "预约订单") +@ApiSupport(order = 22) +@RestController +@RequestMapping("/order/per") +public class OrderPerController { + + + @Operation(summary = "增加预约") + @PostMapping("/add") + @ApiOperationSupport(order = 1) + public Result addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) { + return orderSwapBatteryService.addPre(osbp); + } + + @Operation(summary = "取消预约") + @PostMapping("/cancel") + @ApiOperationSupport(order = 2) + public Result cancelPre(@NotNull Integer id) { + return orderSwapBatteryService.cancelPre(id, null); + } + + @Operation(summary = "查询预约") + @GetMapping("/list") + @ApiOperationSupport(order = 3) + public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException { + return orderSwapBatteryService.listPre(plsopr); + } + +} 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 d13c1cb..d96b61e 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 @@ -1,28 +1,19 @@ package com.evotech.hd.cloud.controller.order; -import com.evotech.hd.cloud.entity.vo.NativePayVO; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.cloud.service.OrderService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.order.OrderListVo; import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport; -import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import org.springdoc.core.annotations.ParameterObject; -import org.springframework.web.bind.annotation.*; - -import java.text.ParseException; -import java.util.List; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Tag(name = "换电订单") @ApiSupport(order = 22) @@ -31,139 +22,95 @@ import java.util.List; public class OrderSwapBatteryController { @Resource - private OrderSwapBatteryService orderSwapBatteryService; - - - @Operation(summary = "增加预约") - @PostMapping("/pre/add") - @ApiOperationSupport(order = 1) - public Result addPre(@Valid @ParameterObject OrderSwapBatteryPre osbp) { - return orderSwapBatteryService.addPre(osbp); - } - - @Operation(summary = "取消预约") - @PostMapping("/pre/cancel") - @ApiOperationSupport(order = 2) - public Result cancelPre(@NotNull Integer id) { - return orderSwapBatteryService.cancelPre(id, null); - } - - @Operation(summary = "查询预约") - @GetMapping("/pre/list") - @ApiOperationSupport(order = 3) - public Result> listPre(@ParameterObject PageListSwapOrderPreRequest plsopr) throws ParseException { - return orderSwapBatteryService.listPre(plsopr); - } - - - - @Operation(summary = "增加") - @PostMapping("/add") - @ApiOperationSupport(order = 4) - public Result add(@Valid @ParameterObject OrderSwapBattery osb) { - return orderSwapBatteryService.add(osb); - } - - @Operation(summary = "删除") - @PostMapping("/del") - @ApiOperationSupport(order = 5) - public Result delete(Integer id) { - return orderSwapBatteryService.delete(id); - } - - @Operation(summary = "修改") - @PostMapping({"/update"}) - @ApiOperationSupport(order = 6) - public Result update(@ParameterObject OrderSwapBattery osb) { - return orderSwapBatteryService.update(osb); - } - + private OrderService orderService; + + @Operation(summary = "查询") @GetMapping("/list") @ApiOperationSupport(order = 7) - public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { - return orderSwapBatteryService.list(plsor); + public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { + return orderService.pageList(plsor); } - @Operation(summary = "查询公司订单") - @GetMapping("/listcompanyorder") - @ApiOperationSupport(order = 8) - @Hidden - @Deprecated - public Result> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) { - return orderSwapBatteryService.listByCompany(plsor); - } - - @Operation(summary = "查询换电步骤") - @GetMapping("/step/list") - @ApiOperationSupport(order = 9) - public Result> listStep(@NotBlank String orderNo) { - return orderSwapBatteryService.listStep(orderNo); - } - - @Operation(summary = "费用计算") - @PostMapping({"/cost"}) - @ApiOperationSupport(order = 9) - public Result calculateCost(@NotBlank @RequestParam OrderSwapBattery osb) { - return orderSwapBatteryService.calculateCost(osb); - } - - - @Operation(summary = "个人账户余额支付") - @PostMapping({"/wallet/pay"}) - @ApiOperationSupport(order = 11) - public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { - return orderSwapBatteryService.walletPay(orderNo, wuid, uname); - } - - - @Operation(summary = "公司订单余额支付") - @PostMapping({"/companywallet/pay"}) - @ApiOperationSupport(order = 12) - public Result companyWalletPay(@RequestParam String orderNo, String wuid, String uname) { - // TODO - return null; - } - - - @Operation(summary = "公司订单扫码支付") - @PostMapping({"/wechat/nativepay"}) - @ApiOperationSupport(order = 13) - public Result companyNativePay(@RequestBody NativePayVO prePay) { - return orderSwapBatteryService.companyNativePay(prePay); - } - - @Operation(summary = "扫码支付订单查询状态") - @GetMapping("/paystatus/query") - @ApiOperationSupport(order = 14) - public Result orderQuery(String outTradeNo) { - return orderSwapBatteryService.orderQuery(outTradeNo); - } - - @Operation(summary = "站端取消订单") - @PostMapping("/pre/cancelOrder") - @ApiOperationSupport(order = 15) - public Result cancelOrder(@NotNull String orderNo) { - return orderSwapBatteryService.cancelOrder(orderNo, null); - } - @Operation(summary = "开始换电") - @PostMapping("/startSwap") - @ApiOperationSupport(order = 16) - public Result startSwap(@RequestParam String wuid,String orderId) { - return orderSwapBatteryService.startSwap(wuid,orderId); - } - @Operation(summary = "获取开始换电回复") - @PostMapping("/getStartSwap") - @ApiOperationSupport(order = 17) - public Result getStartSwap(@RequestParam String wuid, String orderId) { - return orderSwapBatteryService.getStartSwap(wuid,orderId); - } - - @Operation(summary = "未完成订单查询:plateNum") - @GetMapping("/checkList") - @ApiOperationSupport(order = 18) - public Result checkList(@ParameterObject PageListSwapOrderRequest plsor) { - return orderSwapBatteryService.checkList(plsor); - } +// @Operation(summary = "查询公司订单") +// @GetMapping("/listcompanyorder") +// @ApiOperationSupport(order = 8) +// @Hidden +// @Deprecated +// public Result> listByCompany(@ParameterObject PageListSwapOrderRequest plsor) { +// return orderSwapBatteryService.listByCompany(plsor); +// } +// +// @Operation(summary = "查询换电步骤") +// @GetMapping("/step/list") +// @ApiOperationSupport(order = 9) +// public Result> listStep(@NotBlank String orderNo) { +// return orderSwapBatteryService.listStep(orderNo); +// } +// +// @Operation(summary = "费用计算") +// @PostMapping({"/cost"}) +// @ApiOperationSupport(order = 9) +// public Result calculateCost(@NotBlank @RequestParam OrderSwapBattery osb) { +// return orderSwapBatteryService.calculateCost(osb); +// } +// +// +// @Operation(summary = "个人账户余额支付") +// @PostMapping({"/wallet/pay"}) +// @ApiOperationSupport(order = 11) +// public Result walletPay(@RequestParam String orderNo, String wuid, String uname) { +// return orderSwapBatteryService.walletPay(orderNo, wuid, uname); +// } +// +// +// @Operation(summary = "公司订单余额支付") +// @PostMapping({"/companywallet/pay"}) +// @ApiOperationSupport(order = 12) +// public Result companyWalletPay(@RequestParam String orderNo, String wuid, String uname) { +// // TODO +// return null; +// } +// +// +// @Operation(summary = "公司订单扫码支付") +// @PostMapping({"/wechat/nativepay"}) +// @ApiOperationSupport(order = 13) +// public Result companyNativePay(@RequestBody NativePayVO prePay) { +// return orderSwapBatteryService.companyNativePay(prePay); +// } +// +// @Operation(summary = "扫码支付订单查询状态") +// @GetMapping("/paystatus/query") +// @ApiOperationSupport(order = 14) +// public Result orderQuery(String outTradeNo) { +// return orderSwapBatteryService.orderQuery(outTradeNo); +// } +// +// @Operation(summary = "站端取消订单") +// @PostMapping("/pre/cancelOrder") +// @ApiOperationSupport(order = 15) +// public Result cancelOrder(@NotNull String orderNo) { +// return orderSwapBatteryService.cancelOrder(orderNo, null); +// } +// @Operation(summary = "开始换电") +// @PostMapping("/startSwap") +// @ApiOperationSupport(order = 16) +// public Result startSwap(@RequestParam String wuid,String orderId) { +// return orderSwapBatteryService.startSwap(wuid,orderId); +// } +// @Operation(summary = "获取开始换电回复") +// @PostMapping("/getStartSwap") +// @ApiOperationSupport(order = 17) +// public Result getStartSwap(@RequestParam String wuid, String orderId) { +// return orderSwapBatteryService.getStartSwap(wuid,orderId); +// } +// +// @Operation(summary = "未完成订单查询:plateNum") +// @GetMapping("/checkList") +// @ApiOperationSupport(order = 18) +// public Result checkList(@ParameterObject PageListSwapOrderRequest plsor) { +// return orderSwapBatteryService.checkList(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 b8716f7..6ecf7c6 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 @@ -1,172 +1,172 @@ -package com.evotech.hd.cloud.controller.test; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.dao.BatteryStationDao; -import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; -import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; -import com.evotech.hd.cloud.device.dh.DHRequestUtil; -import com.evotech.hd.cloud.mqtt.message.MessageTopic; -import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; -import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor; -import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.BatteryStation; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.utils.Collections; -import jakarta.annotation.Resource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.web.bind.annotation.*; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -/** - * @desc: - * @ClassName:TestController - * @date: 2025年04月18日 14:40 - * @author: andy.shi - * @contact: 17330188597 - * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 - */ -@RestController -@RequestMapping("/test") -public class TestController { - - @Resource - private BatteryStationDao batteryStationDao; - private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; - @Resource - private OrderSwapBatteryPreDao orderSwapBatteryPreDao; - @Resource - private SwapOrderBasicFeeComponent orderBasicFeeComponent; - @Resource - MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor; - @Autowired - private ApplicationContext applicationContext; +//package com.evotech.hd.cloud.controller.test; +// +//import cn.hutool.core.date.DatePattern; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.RandomUtil; +//import cn.hutool.json.JSONUtil; +//import com.alibaba.fastjson.JSONObject; +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.evotech.hd.cloud.dao.BatteryStationDao; +//import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; +//import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; +//import com.evotech.hd.cloud.device.dh.DHRequestUtil; +//import com.evotech.hd.cloud.mqtt.message.MessageTopic; +//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +//import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; +//import com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state.MqttStateChargingDataExchangeProcessor; +//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.BatteryStation; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +//import com.evotech.hd.common.core.utils.Collections; +//import jakarta.annotation.Resource; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.ApplicationContext; +//import org.springframework.web.bind.annotation.*; +// +//import java.util.Date; +//import java.util.List; +//import java.util.Map; +// +///** +// * @desc: +// * @ClassName:TestController +// * @date: 2025年04月18日 14:40 +// * @author: andy.shi +// * @contact: 17330188597 +// * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 +// */ +//@RestController +//@RequestMapping("/test") +//public class TestController { +// // @Resource -// VehicleService vehicleService; +// private BatteryStationDao batteryStationDao; +// private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; // @Resource -// MongoDBService mongoDBService; - - @PostMapping("/mongodb/save") - public Result mongodbSave() { - mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}")); - return new Result().success("搞定"); - } - - @PostMapping("/mongodb/list") - public Result mongoList() { -// mongoDBService.find("123", ChargingData.class, Collections.asMap(MongoConstant.REGEX+MongoConstant.SEPARATION+"value","\"batCode\":124")) - return new Result().success(""); - } - - - @PostMapping("/mqtt/test") - public Result mqttTest(@RequestBody JSONObject json) { - MessageTopic topic = new MessageTopic(); - topic.setDataDirection(json.getString("dataDirection")); - topic.setMessageType(json.getString("messageType")); - topic.setStationCode(json.getString("stationCode")); - MqttMessageHeader header = new MqttMessageHeader(); - header.setFunction(json.getString("function")); - cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy")); - - Map mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class); - for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) { - if(processor.accept(header.getFunction())){ - processor.exchange(topic, header, dataBody); - } - } - return new Result().success("搞定"); - } - - - - @GetMapping("/station") - public Result list() { - System.out.println("======>>开始......"); - BatteryStation station = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode,"FD12795455")); - // 查这天,这个站的预约 - List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper().eq("station_code", station.getCode()).eq("status", 1).eq("ucode","e2fb21b6447e10006f19a23e06b67914")); - // 根据预约生成订单 - if (orderPreList.isEmpty()) { - System.out.println("没有预约单"); - } - OrderSwapBatteryPre orderPre = orderPreList.get(0); - OrderSwapBattery order = new OrderSwapBattery(); - order.setOrderType(1); - order.setCtime(new Date()); - order.setCreater("TEST"); - order.setOrderPreId(orderPre.getPkId()); - order.setOrderPreUid(orderPre.getUcode()); - order.setOrderPreUname(orderPre.getUname()); - order.setOrderPrePhone(orderPre.getPhone()); - order.setOrderTime(new Date()); - order.setOrderNo(orderNo(station.getCode(), order.getOrderTime())); - order.setPlateNum(orderPre.getPlateNum()); - - order.setStationCode(orderPre.getStationCode()); - order.setStationName(orderPre.getStationName()); - order.setStatus(1); - order.setFeeType(3); - order.setDelFlag(0); - order.setRemark("测试用的"); - order.setChangeMode(1); - order.setChangeLane(1); - // 加上费用标准 - order = orderBasicFeeComponent.orderBasicFee(order); - - System.out.println(JSONUtil.toJsonStr(order)); - return new Result().success(order); - } - - - private String orderNo(String stationCode, Date d) { - String orderNoPrefix = "YTSO"; - String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8); - String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER); - String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF"); - return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix; - } - - @PostMapping("/device/live") - public Result deviceLive(@RequestParam String deviceId, @RequestParam String channelId) { - return new Result().success(DHRequestUtil.live(deviceId, channelId)); - } - - @PostMapping("/device/liveInfo") - public Result deviceLiveInfo(@RequestParam String deviceId, @RequestParam String channelId) { - return new Result().success(DHRequestUtil.liveInfo(deviceId, channelId)); - } - - @PostMapping("/device/delLive") - public Result delLive(@RequestParam String liveToken) { - return new Result().success(DHRequestUtil.delLive(liveToken)); - } - - @PostMapping("/device/list") - public Result deviceList(@RequestParam Integer page, @RequestParam Integer pageSize) { - return new Result().success(DHRequestUtil.deviceList(Collections.asMap("pageNum", page, "pageSize", pageSize))); - } - - @PostMapping("/device/createDeviceStreamUrl") - public Result createDeviceStreamUrl(@RequestParam String deviceId, @RequestParam String channelId) { - return new Result().success(DHRequestUtil.createDeviceStreamUrl(deviceId, channelId)); - } - - @PostMapping("/store/list") - public Result storeList(@RequestParam Integer page, @RequestParam Integer pageSize) { - return new Result().success(DHRequestUtil.storeList(page, pageSize)); - } - -} +// private OrderSwapBatteryPreDao orderSwapBatteryPreDao; +// @Resource +// private SwapOrderBasicFeeComponent orderBasicFeeComponent; +// @Resource +// MqttStateChargingDataExchangeProcessor mqttStateChargingDataRequestExchangeProcessor; +// @Autowired +// private ApplicationContext applicationContext; +//// @Resource +//// VehicleService vehicleService; +//// @Resource +//// MongoDBService mongoDBService; +// +// @PostMapping("/mongodb/save") +// public Result mongodbSave() { +// mqttStateChargingDataRequestExchangeProcessor.exchange(null,null,JSONUtil.parseObj("{batCode:123,orderNo:123321}")); +// return new Result().success("搞定"); +// } +// +// @PostMapping("/mongodb/list") +// public Result mongoList() { +//// mongoDBService.find("123", ChargingData.class, Collections.asMap(MongoConstant.REGEX+MongoConstant.SEPARATION+"value","\"batCode\":124")) +// return new Result().success(""); +// } +// +// +// @PostMapping("/mqtt/test") +// public Result mqttTest(@RequestBody JSONObject json) { +// MessageTopic topic = new MessageTopic(); +// topic.setDataDirection(json.getString("dataDirection")); +// topic.setMessageType(json.getString("messageType")); +// topic.setStationCode(json.getString("stationCode")); +// MqttMessageHeader header = new MqttMessageHeader(); +// header.setFunction(json.getString("function")); +// cn.hutool.json.JSONObject dataBody = JSONUtil.parseObj(json.getJSONObject("dataBoy")); +// +// Map mqttMessageRequestExchangeProcessorMap = applicationContext.getBeansOfType(MqttStrategyExchangeProcessor.class); +// for (MqttStrategyExchangeProcessor processor : mqttMessageRequestExchangeProcessorMap.values()) { +// if(processor.accept(header.getFunction())){ +// processor.exchange(topic, header, dataBody); +// } +// } +// return new Result().success("搞定"); +// } +// +// +// +// @GetMapping("/station") +// public Result list() { +// System.out.println("======>>开始......"); +// BatteryStation station = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode,"FD12795455")); +// // 查这天,这个站的预约 +// List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper().eq("station_code", station.getCode()).eq("status", 1).eq("ucode","e2fb21b6447e10006f19a23e06b67914")); +// // 根据预约生成订单 +// if (orderPreList.isEmpty()) { +// System.out.println("没有预约单"); +// } +// OrderSwapBatteryPre orderPre = orderPreList.get(0); +// OrderSwapBattery order = new OrderSwapBattery(); +// order.setOrderType(1); +// order.setCtime(new Date()); +// order.setCreater("TEST"); +// order.setOrderPreId(orderPre.getPkId()); +// order.setOrderPreUid(orderPre.getUcode()); +// order.setOrderPreUname(orderPre.getUname()); +// order.setOrderPrePhone(orderPre.getPhone()); +// order.setOrderTime(new Date()); +// order.setOrderNo(orderNo(station.getCode(), order.getOrderTime())); +// order.setPlateNum(orderPre.getPlateNum()); +// +// order.setStationCode(orderPre.getStationCode()); +// order.setStationName(orderPre.getStationName()); +// order.setStatus(1); +// order.setFeeType(3); +// order.setDelFlag(0); +// order.setRemark("测试用的"); +// order.setChangeMode(1); +// order.setChangeLane(1); +// // 加上费用标准 +// order = orderBasicFeeComponent.orderBasicFee(order); +// +// System.out.println(JSONUtil.toJsonStr(order)); +// return new Result().success(order); +// } +// +// +// private String orderNo(String stationCode, Date d) { +// String orderNoPrefix = "YTSO"; +// String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8); +// String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER); +// String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF"); +// return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix; +// } +// +// @PostMapping("/device/live") +// public Result deviceLive(@RequestParam String deviceId, @RequestParam String channelId) { +// return new Result().success(DHRequestUtil.live(deviceId, channelId)); +// } +// +// @PostMapping("/device/liveInfo") +// public Result deviceLiveInfo(@RequestParam String deviceId, @RequestParam String channelId) { +// return new Result().success(DHRequestUtil.liveInfo(deviceId, channelId)); +// } +// +// @PostMapping("/device/delLive") +// public Result delLive(@RequestParam String liveToken) { +// return new Result().success(DHRequestUtil.delLive(liveToken)); +// } +// +// @PostMapping("/device/list") +// public Result deviceList(@RequestParam Integer page, @RequestParam Integer pageSize) { +// return new Result().success(DHRequestUtil.deviceList(Collections.asMap("pageNum", page, "pageSize", pageSize))); +// } +// +// @PostMapping("/device/createDeviceStreamUrl") +// public Result createDeviceStreamUrl(@RequestParam String deviceId, @RequestParam String channelId) { +// return new Result().success(DHRequestUtil.createDeviceStreamUrl(deviceId, channelId)); +// } +// +// @PostMapping("/store/list") +// public Result storeList(@RequestParam Integer page, @RequestParam Integer pageSize) { +// return new Result().success(DHRequestUtil.storeList(page, pageSize)); +// } +// +//} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java new file mode 100644 index 0000000..8a4c058 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDao.java @@ -0,0 +1,46 @@ +package com.evotech.hd.cloud.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.cloud.entity.order.Order; +import com.evotech.hd.common.core.Dto.home.*; +import com.evotech.hd.common.core.Dto.request.HomeRequestDto; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.permission.DataScope; +import com.evotech.hd.common.core.permission.DataScopes; +import org.apache.ibatis.annotations.Param; + +import java.util.Date; +import java.util.List; +/** + * 接口 + * + * @ClassName:OrderMapper + * @date: 2025年05月16日 14:00 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@DataScopes({ + @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE), + @DataScope(permissionObject = HDConstant.COMPANY_ROLE_CODE, permissionScopeName = "plate_num", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_CAR_CODE), +}) +//@DataScopeOpenMethod(openMethod = true, methodName = {"homeFindHalfYearAmountData"}) +public interface OrderDao extends BaseMapper { + + List homeFindProportionData(@Param("params") HomeRequestDto params); + + List homeFindAmountData(@Param("params") HomeRequestDto params); +// + List homeFindHalfYearOrderData(@Param("params") HomeRequestDto params); + +// @DataScope(permissionObject = HDConstant.OPERATOR_ROLE_CODE, tableAlias = "osb", permissionScopeName = "station_code", permissionScopeRedisKey = HDConstant.PermissionConstant.PERMISSION_STATION_CODE) + List homeFindHalfYearAmountData(@Param("params") HomeRequestDto params); + //因为站端不需要显示金额, 所有重新写一个 + List homeFindHalfYearStationAmountData(@Param("params") HomeRequestDto params); + + Long homeFindOrderCountData(@Param("date") Date date); + + Double homeFindOrderAmountData(@Param("date") Date date); + + List findOrderListByStatus(@Param("status") Integer status); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java new file mode 100644 index 0000000..f2e380f --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/OrderDetailDao.java @@ -0,0 +1,16 @@ +package com.evotech.hd.cloud.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.evotech.hd.cloud.entity.order.OrderDetail; + +/** + * 接口 + * + * @ClassName:OrderDetailDap + * @date: 2025年05月17日 11:09 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderDetailDao extends BaseMapper { +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java index 9d48006..f293a43 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/MessageMqtt.java @@ -4,15 +4,13 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; - -import java.io.Serializable; -import java.util.Date; - -import org.springframework.format.annotation.DateTimeFormat; - import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.Setter; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; /** * @author zrb @@ -57,4 +55,15 @@ public class MessageMqtt implements Serializable { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date ctime; + + public MessageMqtt() { + } + + public MessageMqtt(String stationCode, String direction, String type, String messageFunction, Date ctime) { + this.stationCode = stationCode; + this.direction = direction; + this.type = type; + this.messageFunction = messageFunction; + this.ctime = ctime; + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java new file mode 100644 index 0000000..594134f --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/BaseOrder.java @@ -0,0 +1,59 @@ +package com.evotech.hd.cloud.entity.order; + +import com.evotech.hd.common.core.entity.IdEntity; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:BaseOrder + * @date: 2025年05月16日 11:11 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class BaseOrder extends IdEntity { + + /*** + * 订单编码 + */ + private String orderNo; + + /*** + * 订单金额 + */ + private Integer orderAmount; + + /*** + * 订单状态, 具体参考 HDConstant.OrderConstant.ORDER_STATUS_* + */ + private Integer status; + /*** + * 支付方式 具体参考 HDConstant.OrderConstant.PAY_TYPE_* + */ + private String payType; + /*** + * 支付时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date payTime; + /*** + * 支付人的wuId + */ + private String wuId; + + /*** + * 第三方返回的唯一订单标识 + */ + private String notifyOrderNo; + /*** + * 支付的回调信息 + */ + private String notifyInfo; +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java new file mode 100644 index 0000000..b35e1cf --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/Order.java @@ -0,0 +1,77 @@ +package com.evotech.hd.cloud.entity.order; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:SwapOrder + * @date: 2025年05月16日 11:29 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName(value = "yt_t_product_order", schema = "hd_cloud_manage") +public class Order extends BaseOrder{ + + private Integer orderPreId; + + /*** + * 预约用户ID + */ + private Integer preUid; + + /*** + * 预约用户名称 + */ + private String preName; + /*** + * 订单类型, 具体参考 HDConstant.OrderConstant.ORDER_TYPE_* + */ + private Integer orderType; + /*** + * 车牌号 + */ + private String plateNum; + + /*** + * 下单时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date orderTime; + /*** + * '换电站编码' + */ + private String stationCode; + + /*** + * ''换电站名称'' + */ + private String stationName; + + /*** + * 订单状态, 具体参考 HDConstant.DELETE_* + */ + private Integer delFlag; + + /*** + * 备注信息 + */ + private String remark; + + /*** + * 变更时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java new file mode 100644 index 0000000..65f858a --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/OrderDetail.java @@ -0,0 +1,108 @@ +package com.evotech.hd.cloud.entity.order; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.evotech.hd.common.core.entity.IdEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderDetail + * @date: 2025年05月17日 9:10 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +@TableName(value = "yt_t_order_detail", schema = "hd_cloud_manage") +@EqualsAndHashCode(callSuper=false) +public class OrderDetail extends IdEntity { + + private Integer orderId; + + /*** + * 计费类型, 具体参考 HDConstant.OrderConstant.FEE_TYPE_* + */ + private Integer feeType; + /*** + * 订单金额 (此金额是当前订单的金额, 不包含基础服务费, 所以不是订单总额) + */ + private Integer orderFee; + /*** + * 服务费 + */ + private Integer serviceFee; + /*** + * 单价(分) + */ + private Integer unitPrice; + /*** + * 服务开始时间 + */ + private Date serviceTimeBegin; + /*** + * 服务结束时间 + */ + private Date serviceTimeEnd; + /*** + * 订单开始时间 + */ + private Date orderTimeBegin; + /*** + * 订单结束时间 + */ + private Date orderTimeEnd; + /*** + * 费用标准详情 + */ + private String feeStandard; + /*** + * 耗电量; 如果是soc结算 则是soc的差值, ODO则是里程 + */ + private Double electricityQuantity; + + /*** + * 开始充电的电量 + */ + private Double electStart; + /*** + * 结束充电的电量 + */ + private Double electEnd; + /*** + * 租借电池包仓位 + */ + private String rentBatNo; + /*** + * 租借电池包编码 + */ + private String rentBatCode; + /*** + * 租借电池包SOC + */ + private Double rentBatSOC; + /*** + * 归还电池包仓位 + */ + private String returnBatNo; + /*** + * 归还电池包编码 + */ + private String returnBatCode; + /*** + * 归还电池包SOC + */ + private Double returnBatSOC; + /*** + * 换电模式 HDConstant.OrderConstant.CHANGE_MODE_* + */ + private Integer changeMode; + /*** + * 换电车道 HDConstant.OrderConstant.CHANGE_LANE_* + */ + private Integer changeLane; + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/RechargeOrder.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/RechargeOrder.java new file mode 100644 index 0000000..e07884c --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/order/RechargeOrder.java @@ -0,0 +1,21 @@ +package com.evotech.hd.cloud.entity.order; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 充值订单类 + * @ClassName:RechargeOrder + * @date: 2025年05月16日 11:06 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@TableName(value = "yt_t_recharge_order", schema = "hd_cloud_manage") +public class RechargeOrder extends BaseOrder { + + +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java index b4873f6..0e45440 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeCompanyData.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo; +import com.evotech.hd.common.core.Dto.home.HomeOrderInfo; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java index 252e224..c3a4cbf 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeData3.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryProportionDto; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java index 09a4d7a..fc75711 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePlatformData2.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryHalfYearAmountDto; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java index 5f3244d..b28bd2e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomePoxyData2.java @@ -1,7 +1,7 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryHalfYearAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryProportionDto; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java index 21797e4..d6c9543 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/HomeStationData.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.entity.vo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryHalfYearAmountDto; import com.evotech.hd.common.core.utils.Collections; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java new file mode 100644 index 0000000..251a680 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/entity/vo/MqttMessageParam.java @@ -0,0 +1,33 @@ +package com.evotech.hd.cloud.entity.vo; + +import com.evotech.hd.cloud.entity.MessageMqtt; +import lombok.Data; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:MqttMessageParam + * @date: 2025年05月19日 10:26 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Data +public class MqttMessageParam extends MessageMqtt { + + /*** + * 订单编号 + */ + String orderNo; + + public MqttMessageParam() { + } + + + public MqttMessageParam(String orderNo, String stationCode, String direction, String type, String messageFunction, Date ctime) { + super(stationCode, direction, type, messageFunction, ctime); + this.orderNo = orderNo; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java index 20864fb..7fd485c 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/dto/newer/req/MqttResponse.java @@ -43,6 +43,12 @@ public class MqttResponse implements Serializable { this.msg=errorMessage; return this; } + public MqttResponse error(T data, String errorMessage){ + this.code=ERROR; + this.msg=errorMessage; + this.data=data; + return this; + } public MqttResponse paramsError(String errorMessage){ this.code=PARAMS_ERROR; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java index 5d1d0fe..7334b94 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/RequestMessageService.java @@ -23,13 +23,10 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoResponse; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.*; import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; import com.evotech.hd.cloud.service.WechatUserService; import com.evotech.hd.cloud.utils.CommonUtil; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; @@ -62,13 +59,13 @@ public class RequestMessageService { private MessageUtilService messageUtilService; @Resource private BatteryStationDcDao batteryStationDcDao; - @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; +// @Resource +// private OrderSwapBatteryDao orderSwapBatteryDao; @Resource private OrderSwapBatteryPreDao orderSwapBatteryPreDao; - @Resource - private OrderSwapBatteryService orderSwapBatteryService; +// @Resource +// private OrderSwapBatteryService orderSwapBatteryService; @Resource private RedisUtil redisUtil; @Autowired @@ -93,10 +90,10 @@ public class RequestMessageService { OrderByPlateNumReq orderByPlateNumReq = JSONUtil.toBean(dataBody, OrderByPlateNumReq.class); handleOrderByPlateNum(topic, header, orderByPlateNumReq); break; - case FUN_CANCELORDER: - CancelOrderReq cancelOrder = JSONUtil.toBean(dataBody, CancelOrderReq.class); - handlOrderCancel(topic,header,cancelOrder); - break; +// case FUN_CANCELORDER: +// CancelOrderReq cancelOrder = JSONUtil.toBean(dataBody, CancelOrderReq.class); +// handlOrderCancel(topic,header,cancelOrder); +// break; case FUN_STARTSWAP: BatterySwapResponse battery = JSONUtil.toBean(dataBody, BatterySwapResponse.class); handlStartSwap(topic,header,battery); @@ -144,28 +141,28 @@ public class RequestMessageService { * @param header * @param cancelOrder */ - private void handlOrderCancel(MessageTopic topic, MqttMessageHeader header, CancelOrderReq cancelOrder) { - Date d = new Date(); - CancelOrderResponse response = new CancelOrderResponse(); - - Result integerResult = orderSwapBatteryService.cancelOrder(cancelOrder.getOrderNo(), 9); - if (integerResult.getStatus()==0){ - response.setCode(0); - response.setMsg(integerResult.getMsg()); - response.setOrderNo(cancelOrder.getOrderNo()); - }else { - response.setCode(1); - response.setMsg(integerResult.getMsg()); - response.setOrderNo("OK"); - } - // 发送 - topic.setDataDirection("M2S"); - topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType()); - header.setFunction(RequestFunctionTypesEnum.FUN_CANCELORDER.getReFunction()); - header.setTimeStamp(DateUtil.format(d, DatePattern.NORM_DATETIME_FORMATTER)); - log.info("\r\n=====>>>站端取消订单--MQTT发送到消息主题:{},头部信息:{}订单编码;{},message:{}", topic,header, cancelOrder.getOrderNo(),JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); - messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); - } +// private void handlOrderCancel(MessageTopic topic, MqttMessageHeader header, CancelOrderReq cancelOrder) { +// Date d = new Date(); +// CancelOrderResponse response = new CancelOrderResponse(); +// +// Result integerResult = orderSwapBatteryService.cancelOrder(cancelOrder.getOrderNo(), 9); +// if (integerResult.getStatus()==0){ +// response.setCode(0); +// response.setMsg(integerResult.getMsg()); +// response.setOrderNo(cancelOrder.getOrderNo()); +// }else { +// response.setCode(1); +// response.setMsg(integerResult.getMsg()); +// response.setOrderNo("OK"); +// } +// // 发送 +// topic.setDataDirection("M2S"); +// topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType()); +// header.setFunction(RequestFunctionTypesEnum.FUN_CANCELORDER.getReFunction()); +// header.setTimeStamp(DateUtil.format(d, DatePattern.NORM_DATETIME_FORMATTER)); +// log.info("\r\n=====>>>站端取消订单--MQTT发送到消息主题:{},头部信息:{}订单编码;{},message:{}", topic,header, cancelOrder.getOrderNo(),JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); +// messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); +// } /** * 站端添加预约单 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java new file mode 100644 index 0000000..e042a98 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestCancelOrderExchangeProcessorImpl.java @@ -0,0 +1,51 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; +import com.evotech.hd.cloud.service.OrderService; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.utils.Collections; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +/** + * 取消订单请求类 + * + * @ClassName:MqttRequestCancelOrderExchangeProcessorImpl + * @date: 2025年05月19日 14:51 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class MqttRequestCancelOrderExchangeProcessorImpl implements MqttStrategyExchangeProcessor { + @Resource + OrderService orderService; + + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_CANCELORDER.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + String orderNo = dataBody.getStr("orderNo"); + Assert.hasText(orderNo, "orderNo is null"); + + Result updateResult = orderService.updateStatus(orderNo, 9); + MqttResponse response = null; + if(updateResult.getData()){ + response = new MqttResponse().success(JSONUtil.toJsonStr(Collections.asMap("orderNo", orderNo))); + }else{ + response = new MqttResponse().error(JSONUtil.toJsonStr(Collections.asMap("orderNo", orderNo)),updateResult.getMsg()); + } + sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CANCELORDER, response); + + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java new file mode 100644 index 0000000..071697b --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPreOrderExchangeProcessorImpl.java @@ -0,0 +1,93 @@ +package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONConfig; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.message.MessageTopic; +import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrdeSwapBatteryPreRespose; +import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; +import com.evotech.hd.common.core.entity.Result; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import com.evotech.hd.common.core.entity.wechat.WechatUser; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.stream.Stream; + +/** + * 站端请求创建预约单类 + * + * @ClassName:MqttRequestPreOrderExchangeProcessorImpl + * @date: 2025年05月19日 17:41 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Service +public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyExchangeProcessor { + @Override + public boolean accept(String functionName) { + return RequestFunctionTypesEnum.FUN_PREORDER.getFunction().equals(functionName); + } + + @Override + public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { + OrderSwapBatteryPre orderSwapBatteryPre = JSONUtil.toBean(dataBody, OrderSwapBatteryPre.class); + OrdeSwapBatteryPreRespose response = new OrdeSwapBatteryPreRespose(); + Date d = new Date(); + // 1. 基础字段校验 + if (validateRequiredFields(orderSwapBatteryPre)) { + // 返回错误消息 + response.setStationPreOrderId(orderSwapBatteryPre.getSourceId()); + response.setMsg("预约信息不完整"); + response.setCode(0); + }else { + //添加预约单 + WechatUser wechatUser =wechatUserService.selectUcode(orderSwapBatteryPre.getPhone(),orderSwapBatteryPre.getUname()); + //查询用户编码 + orderSwapBatteryPre.setUcode(wechatUser.getWuid()); + orderSwapBatteryPre.setSource(3); + Result integerResult = orderSwapBatteryService.addPre(orderSwapBatteryPre); + //添加失败情况 + if (integerResult.getStatus()==0){ + response.setStationPreOrderId(orderSwapBatteryPre.getSourceId()); + //返回失败状态 + response.setMsg(integerResult.getMsg()); + response.setCode(0); + }else{ + response.setStationPreOrderId(orderSwapBatteryPre.getSourceId()); + response.setCode(1); + response.setMsg("OK"); + } + } + // 发送 + topic.setDataDirection("M2S"); + topic.setMessageType(MqttMessageTypeEnum.RESPONSE.getType()); + header.setFunction(RequestFunctionTypesEnum.FUN_PREORDER.getReFunction()); + header.setTimeStamp(DateUtil.format(d, DatePattern.NORM_DATETIME_FORMATTER)); + log.info("\r\n=====>>>站端添加预约单--MQTT发送到消息主题:{},头部信息:{},message:{}", topic,header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + messageUtilService.publishAESMessage(topic, header, JSONUtil.parseObj(response, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); + + + } + + + private boolean validateRequiredFields(OrderSwapBatteryPre order) { + return Stream.of( + order.getPlateNum(), + order.getPhone(), + order.getStationCode(), + order.getStationName(), + order.getUname(), + order.getSwapDay(), + order.getSwapDuration(), + order.getReservationTime() + ).anyMatch(StrUtil::isBlankIfStr); + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java index 57dc0f5..7acb851 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/request/MqttRequestPushCarInfoExchangeProcessorImpl.java @@ -7,7 +7,7 @@ import com.evotech.hd.cloud.mqtt.message.MessageTopic; import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse; import com.evotech.hd.cloud.mqtt.message.processor.strategy.MqttStrategyExchangeProcessor; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; +import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; import com.evotech.hd.cloud.service.VehicleService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -32,7 +32,7 @@ public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategy @Resource VehicleService vehicleService; @Resource - OrderSwapBatteryService orderSwapBatteryService; + OrderSwapBatteryPreService orderSwapBatteryPreService; @Override public boolean accept(String functionName) { @@ -56,36 +56,13 @@ public class MqttRequestPushCarInfoExchangeProcessorImpl implements MqttStrategy //如果response == null 则证明 车辆创建成功了 if(response == null){ //创建预约订单 - if (orderSwapBatteryService.addPreByPlateNum(plateNum, topic.getStationCode())){ + if (orderSwapBatteryPreService.addPreByPlateNum(plateNum, topic.getStationCode())){ //返回状态信息 response = new MqttResponse().success("预约单初始化完成"); }else{ response = new MqttResponse().error("车辆初始化完成, 但是预约单创建失败了"); } } -// if (vehicleService.existsVehicleByPlateNum(plateNum)){ -// //创建预约订单 -// if (orderSwapBatteryService.addPreByPlanNum(plateNum, topic.getStationCode())){ -// //返回状态信息 -// response = new MqttResponse().success("预约单初始化完成"); -// }else{ -// response = new MqttResponse().error("车辆初始化完成, 但是预约单创建失败了"); -// } -// }else{ -// //没有车辆信息, 开始创建 -// if(vehicleService.createVehicleByPlateNum(plateNum, topic.getStationCode())){ -// //创建预约订单 -// if (orderSwapBatteryService.addPreByPlanNum(plateNum, topic.getStationCode())){ -// //返回状态信息 -// response = new MqttResponse().success("预约单初始化完成"); -// }else{ -// response = new MqttResponse().error("车辆初始化完成, 但是预约单创建失败了"); -// } -// }else{ -// response = new MqttResponse().error("创建车辆信息失败了"); -// } -// -// } }else{ response = new MqttResponse().error("参数不全, 没有车牌号信息"); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java index 0e78984..3d0bb25 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/processor/strategy/impl/state/MqttStateStationStateExchangeProcessor.java @@ -43,7 +43,13 @@ public class MqttStateStationStateExchangeProcessor implements MqttStrategyExcha * fire: 获取消防告警信号 0-未知;1-正常;2-告警 */ //通知云端站做状态调整 - batteryStationService.updateStatusByAlarm(topic.getStationCode(), dataBody.getInt("state"), dataBody.getStr("smoke"), dataBody.getInt("fire")); - saveMongoDB(topic, MongoConstant.STATION_INFO_BASE, header.getFunction(),new StationState(dataBody.toString())); + try { + batteryStationService.updateStatusByAlarm(topic.getStationCode(), dataBody.getInt("state"), dataBody.getStr("smoke"), dataBody.getInt("fire")); + } catch (Exception e) { + log.error("更改云端数据信息出错"+e.getMessage()); + }finally { + saveMongoDB(topic, MongoConstant.STATION_INFO_BASE, header.getFunction(),new StationState(dataBody.toString())); + } + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java index a80dc5c..f0e0daa 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/DHDeviceService.java @@ -1,6 +1,6 @@ package com.evotech.hd.cloud.service; -import com.evotech.hd.common.core.Dto.DeviceDto; +import com.evotech.hd.common.core.Dto.device.DeviceDto; import com.evotech.hd.common.core.entity.Result; import java.util.List; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java index d5c71c7..160190b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/HomeService.java @@ -1,6 +1,5 @@ package com.evotech.hd.cloud.service; -import com.evotech.hd.cloud.entity.request.HomeDataRequest; import com.evotech.hd.cloud.entity.vo.*; import com.evotech.hd.common.core.Dto.Result; @@ -43,21 +42,21 @@ public interface HomeService { * @return */ Result> alarmData(); - - public Result homeData1(HomeDataRequest hd); - - public Result homeData2(); - - public Result homeData3(HomeDataRequest hd); - - public Result homeData4(HomeDataRequest hd); - - public Result> homeData5(HomeDataRequest hd); - - public Result> homeData6(HomeDataRequest hd); - - public Result homeData7(Integer type); - - public void loginData(); +// +// public Result homeData1(HomeDataRequest hd); +// +// public Result homeData2(); +// +// public Result homeData3(HomeDataRequest hd); +// +// public Result homeData4(HomeDataRequest hd); +// +// public Result> homeData5(HomeDataRequest hd); +// +// public Result> homeData6(HomeDataRequest hd); +// +// public Result homeData7(Integer type); +// +// public void loginData(); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java index 1a134f6..378878d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/MessageMqttService.java @@ -1,11 +1,12 @@ package com.evotech.hd.cloud.service; -import java.util.List; - import com.evotech.hd.cloud.entity.MessageMqtt; import com.evotech.hd.cloud.entity.request.PageListMessageMqttRequest; +import com.evotech.hd.cloud.entity.vo.MqttMessageParam; import com.evotech.hd.common.core.entity.Result; +import java.util.List; + public interface MessageMqttService { public Result> list(PageListMessageMqttRequest plmmr); @@ -14,4 +15,6 @@ public interface MessageMqttService { public Result del(); + public MessageMqtt getOne(MqttMessageParam param); + } 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 new file mode 100644 index 0000000..34d482e --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderService.java @@ -0,0 +1,37 @@ +package com.evotech.hd.cloud.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.evotech.hd.cloud.entity.order.Order; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.order.OrderListVo; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * 订单接口 + * @ClassName:OrderService + * @date: 2025年05月16日 13:56 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderService extends IService { + + /*** + * 云平台查询订单列表 + * @param plsor + * @return + */ + Result> pageList(PageListSwapOrderRequest plsor); + /*** + * 订单结算 + * @param osb + * @return + */ + public Result calculateCost(Order osb); + + /*** + * 更改订单状态信息 + */ + public Result updateStatus(String orderNo, Integer status); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java new file mode 100644 index 0000000..bc0f728 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryPreService.java @@ -0,0 +1,15 @@ +package com.evotech.hd.cloud.service; + +/** + * 预约单接口 + * + * @ClassName:OrderSwapBatteryPreService + * @date: 2025年05月19日 16:16 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +public interface OrderSwapBatteryPreService { + + public Boolean addPreByPlateNum(String plateNum, String stationCode); +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java index 75ef1b5..af44eea 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/OrderSwapBatteryService.java @@ -1,63 +1,63 @@ -package com.evotech.hd.cloud.service; - -import com.evotech.hd.cloud.entity.vo.NativePayVO; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; - -import java.text.ParseException; -import java.util.List; - -public interface OrderSwapBatteryService { - - public Result addPre(OrderSwapBatteryPre osbp); - - public Result cancelPre(Integer id, Integer status); - - public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException; - - public Result add(OrderSwapBattery osb); - - public Result delete(Integer id); - - public Result update(OrderSwapBattery osb); - - public Result> list(PageListSwapOrderRequest plsor); - - public Result> listByCompany(PageListSwapOrderRequest plsor); - - public Result> listStep(String orderNo); - - public Result calculateCost1(String orderNo, OrderStatusData statusData); - - public Result calculateCost(OrderSwapBattery osb); - - public Result walletPay(String orderNo, String wuid, String uname); - - public Result companyNativePay(NativePayVO prePay); - - public Result orderQuery(String outTradeNo); - - - public Result cancelOrder(String orderNo, Integer status); - - public Result markOrderAsExpired(Integer pkId); - - public Result startSwap(String wuid,String orderId); - - public Result getStartSwap(String wuid, String orderId); - - public Result checkList(PageListSwapOrderRequest plsor); - - - public Boolean addPreByPlateNum(String plateNum, String stationCode); - - public List findOrderSwapBatteryPreList(String stationCode); - - Boolean clearOrderSwapBatteryPre(List ids); -} +//package com.evotech.hd.cloud.service; +// +//import com.evotech.hd.cloud.entity.vo.NativePayVO; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +//import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryStep; +//import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +// +//import java.text.ParseException; +//import java.util.List; +// +//public interface OrderSwapBatteryService { +// +// public Result addPre(OrderSwapBatteryPre osbp); +// +// public Result cancelPre(Integer id, Integer status); +// +// public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException; +// +// public Result add(OrderSwapBattery osb); +// +// public Result delete(Integer id); +// +// public Result update(OrderSwapBattery osb); +// +// public Result> list(PageListSwapOrderRequest plsor); +// +// public Result> listByCompany(PageListSwapOrderRequest plsor); +// +// public Result> listStep(String orderNo); +// +// public Result calculateCost1(String orderNo, OrderStatusData statusData); +// +// public Result calculateCost(OrderSwapBattery osb); +// +// public Result walletPay(String orderNo, String wuid, String uname); +// +// public Result companyNativePay(NativePayVO prePay); +// +// public Result orderQuery(String outTradeNo); +// +// +// public Result cancelOrder(String orderNo, Integer status); +// +// public Result markOrderAsExpired(Integer pkId); +// +// public Result startSwap(String wuid,String orderId); +// +// public Result getStartSwap(String wuid, String orderId); +// +// public Result checkList(PageListSwapOrderRequest plsor); +// +// +// public Boolean addPreByPlateNum(String plateNum, String stationCode); +// +// public List findOrderSwapBatteryPreList(String stationCode); +// +// Boolean clearOrderSwapBatteryPre(List ids); +//} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java new file mode 100644 index 0000000..7668dfe --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BaseServiceImpl.java @@ -0,0 +1,37 @@ +package com.evotech.hd.cloud.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.common.core.utils.Collections; +import org.springframework.beans.BeanUtils; + +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * + * 类 + * @ClassName:BaseServiceImpl + * @date: 2025年05月16日 14:55 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@SuppressWarnings("unchecked") +public class BaseServiceImpl, T, D> extends ServiceImpl { + + Page selectPage(Page page, Wrapper queryWrapper, Function function){ + Page result = new Page(); + page = getBaseMapper().selectPage(page,queryWrapper); + BeanUtils.copyProperties(page, result, "records"); + if(Collections.isNotEmpty(result.getRecords())){ + result.setRecords(page.getRecords().stream().map(t ->{ + return function.apply(t); + }).collect(Collectors.toList())); + } + + return result; + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java index 7830779..870ea5d 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/DHDeviceServiceImpl.java @@ -6,7 +6,7 @@ import com.evotech.hd.cloud.device.dh.DHRequestUtil; import com.evotech.hd.cloud.service.BatteryStationService; import com.evotech.hd.cloud.service.DHDeviceService; import com.evotech.hd.cloud.service.rpc.ResourceService; -import com.evotech.hd.common.core.Dto.DeviceDto; +import com.evotech.hd.common.core.Dto.device.DeviceDto; import com.evotech.hd.common.core.Dto.ResultUtil; import com.evotech.hd.common.core.constant.HDConstant; import com.evotech.hd.common.core.entity.Result; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java index 461fec1..e99c770 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/HomeServiceImpl.java @@ -1,47 +1,34 @@ package com.evotech.hd.cloud.service.impl; -import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; -import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.request.HomeDataRequest; import com.evotech.hd.cloud.entity.vo.*; import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; import com.evotech.hd.cloud.service.HomeService; import com.evotech.hd.common.constant.MongoConstant; import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.Dto.ResultUtil; +import com.evotech.hd.common.core.Dto.home.HomeOrderInfo; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryAmountDto; +import com.evotech.hd.common.core.Dto.home.HomeOrderSwapBatteryProportionDto; import com.evotech.hd.common.core.Dto.request.HomeRequestDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderInfo; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryAmountDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryHalfYearAmountDto; -import com.evotech.hd.common.core.Dto.result.home.HomeOrderSwapBatteryProportionDto; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.dao.cloud.HomeDataOrderSwapCollateDao; -import com.evotech.hd.common.core.dao.cloud.HomeDataTradeCollateDao; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; import com.evotech.hd.common.core.dao.resource.ProxyOperaterDao; import com.evotech.hd.common.core.dao.wechat.WechatUserDao; import com.evotech.hd.common.core.entity.cloud.*; import com.evotech.hd.common.core.entity.resource.ProxyOperater; import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; import com.evotech.hd.common.core.utils.Collections; import com.evotech.hd.common.documnet.StationState; -import com.evotech.hd.common.permission.util.RedisPermissionUtils; import com.evotech.hd.common.redis.utils.RedisUtil; import com.evotech.hd.common.service.MongoDBService; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; -import java.math.BigDecimal; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -65,13 +52,7 @@ public class HomeServiceImpl implements HomeService { @Resource private VehicleInfoDao vehicleInfoDao; @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; -// @Resource -// private TradeDetailDao tradeDetailDao; - @Resource - private HomeDataOrderSwapCollateDao homeDataOrderSwapCollateDao; - @Resource - private HomeDataTradeCollateDao homeDataTradeCollateDao; + private OrderDao orderDao; @Resource private RedisUtil redisUtil; @@ -97,7 +78,7 @@ public class HomeServiceImpl implements HomeService { Date d = new Date(); HomeRequestDto homeRequestDto = new HomeRequestDto(DateUtil.offsetMonth(d, -5), d); //订单数量 or 订单金额 - List orderAmountlist = orderSwapBatteryDao.homeFindAmountData(homeRequestDto); + List orderAmountlist = orderDao.homeFindAmountData(homeRequestDto); if(Collections.isNotEmpty(orderAmountlist)){ HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null); if(totalFinishOrder != null){ @@ -113,7 +94,7 @@ public class HomeServiceImpl implements HomeService { //计算占比 Map countMap = Collections.emptyMap(); - List list = orderSwapBatteryDao.homeFindProportionData(homeRequestDto); + List list = orderDao.homeFindProportionData(homeRequestDto); if(Collections.isNotEmpty(list)){ //总订单数 data.setTotalOrderNum(list.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); @@ -137,7 +118,7 @@ public class HomeServiceImpl implements HomeService { }); data.setCountList(countList); //近半年走势情况 - data.setTrendList(orderSwapBatteryDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ + data.setTrendList(orderDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ return o1.getMonth().compareTo(o2.getMonth()); }).collect(Collectors.toList())); return new Result().success(data); @@ -170,7 +151,7 @@ public class HomeServiceImpl implements HomeService { Date d = new Date(); HomeRequestDto homeRequestDto = new HomeRequestDto(DateUtil.beginOfMonth(d), d); //订单数量 or 订单金额 - List orderAmountlist = orderSwapBatteryDao.homeFindAmountData(homeRequestDto); + List orderAmountlist = orderDao.homeFindAmountData(homeRequestDto); if(Collections.isNotEmpty(orderAmountlist)){ HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null); if(totalFinishOrder != null){ @@ -188,7 +169,7 @@ public class HomeServiceImpl implements HomeService { homeRequestDto = new HomeRequestDto(DateUtil.offsetMonth(d, -5), d); //订单数量 or 订单金额 //计算占比 - List list = orderSwapBatteryDao.homeFindProportionData(homeRequestDto); + List list = orderDao.homeFindProportionData(homeRequestDto); if(Collections.isNotEmpty(list)){ //总订单数 data.setHalfYearTotalOrderNum(list.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); @@ -196,7 +177,7 @@ public class HomeServiceImpl implements HomeService { } //近半年走势情况 - data.setTrendList(orderSwapBatteryDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ + data.setTrendList(orderDao.homeFindHalfYearAmountData(homeRequestDto).stream().sorted((o1,o2) ->{ return o1.getMonth().compareTo(o2.getMonth()); }).collect(Collectors.toList())); return new Result().success(data); @@ -222,7 +203,7 @@ public class HomeServiceImpl implements HomeService { //订单数量 or 订单金额 Date d = new Date(); - List orderAmountlist = orderSwapBatteryDao.homeFindAmountData(new HomeRequestDto(DateUtil.beginOfMonth(d), d)); + List orderAmountlist = orderDao.homeFindAmountData(new HomeRequestDto(DateUtil.beginOfMonth(d), d)); if(Collections.isNotEmpty(orderAmountlist)){ HomeOrderSwapBatteryAmountDto totalFinishOrder = orderAmountlist.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).findFirst().orElse(null); if(totalFinishOrder != null){ @@ -235,7 +216,7 @@ public class HomeServiceImpl implements HomeService { data.setTotalOrderNum(defaultValue(data.getTotalFinishOrderNum(),0l)+defaultValue(data.getTotalPendingOrderNum(), 0l)); } //近半年走势情况 - data.setTrendList(orderSwapBatteryDao.homeFindHalfYearStationAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -5), d)).stream().sorted((o1,o2) ->{ + data.setTrendList(orderDao.homeFindHalfYearStationAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -5), d)).stream().sorted((o1,o2) ->{ return o1.getMonth().compareTo(o2.getMonth()); }).collect(Collectors.toList())); return new Result().success(data); @@ -249,7 +230,7 @@ public class HomeServiceImpl implements HomeService { //2 人员 data.setUserNum(wechatUserDao.selectCount(new LambdaQueryWrapper().select(WechatUser::getPkId))); //获取待结算订单 - List orderInfo = orderSwapBatteryDao.findOrderListByStatus(6); + List orderInfo = orderDao.findOrderListByStatus(6); //待结算订单数量 data.setPendingOrderNum(Long.valueOf(orderInfo.size())); //待结算订单金额 @@ -299,187 +280,187 @@ public class HomeServiceImpl implements HomeService { - - - - @Override - public Result homeData1(HomeDataRequest hd) { - // 1. 运营商 - List list1 = proxyOperaterDao.selectList(new LambdaQueryWrapper() - .eq(StringUtils.hasText(hd.getPoCode()), ProxyOperater::getPocode, hd.getPoCode())); - HomeData1 data = new HomeData1(); - data.setProxyer(list1.size()); - // 2. 换电站 - List list2 = batteryStationDao.selectList(new LambdaQueryWrapper() - .eq(BatteryStation::getDelFlag, 0) - .eq(StringUtils.hasText(hd.getPoCode()), BatteryStation::getProxyId, hd.getPoCode()) - .eq(StringUtils.hasText(hd.getStationCode()), BatteryStation::getCode, hd.getStationCode()).select(BatteryStation::getStatus)); - data.setTotalStation(list2.size()); - int size1 = list2.stream().filter(i -> i.getStatus() == 1).toList().size(); - data.setWorkStation(size1); - // 电池 - List list3 = batteryStationDcDao.selectList(new LambdaQueryWrapper() - .eq(BatteryStationDc::getDelFlag, 0) - .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationDc::getSourceCode, hd.getStationCode()).select(BatteryStationDc::getStatus)); - data.setTotalDC(list3.size()); - int dcSize1 = list3.stream().filter(i -> i.getStatus() == 2).toList().size(); - data.setChargeDC(dcSize1); - int dcSize2 = list3.stream().filter(i -> i.getStatus() == 3).toList().size(); - data.setAvailableDC(dcSize2); - // 机器人 - List list4 = batteryStationRobotDao.selectList(new LambdaQueryWrapper() - .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationRobot::getStationCode, hd.getStationCode()).select(BatteryStationRobot::getStatus)); - data.setTotalRobot(list4.size()); - int robotSize1 = list4.stream().filter(i -> i.getStatus() == 1).toList().size(); - data.setAvailableRobot(robotSize1); - - return new Result().success(data); - } - - @Override - public Result homeData2() { - HomeData2 data = new HomeData2(); - // 1. 公司 - Long count1 = companyDao.selectCount(new LambdaQueryWrapper().select(Company::getPkId)); - data.setConpany(count1.intValue()); - // 2. 用户 - Long count2 = wechatUserDao.selectCount(new LambdaQueryWrapper().select(WechatUser::getPkId)); - data.setTotalUser(count2.intValue()); - // 3. 车辆 - Long count3 = vehicleInfoDao.selectCount(new LambdaQueryWrapper().select(VehicleInfo::getPkId)); - data.setTotalCar(count3.intValue()); - - return new Result().success(data); - } - - @Override - public Result homeData3(HomeDataRequest hd) { - if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { - return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); - } - HomeData3 data = new HomeData3(); - data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); - data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); - - List list = orderSwapBatteryDao.homeFindProportionData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); - if(Collections.isNotEmpty(list)){ - Long total = list.stream().collect(Collectors.summingLong(i -> i.getQuantity())); - data.setQuantity(total); - } - data.setStationOrderDataList(list);; - return new Result().success(data); - } - - @Override - public Result homeData4(HomeDataRequest hd) { - if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { - return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); - } - HomeData4 data = new HomeData4(); - data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); - data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); - - List list = orderSwapBatteryDao.homeFindAmountData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); - if(Collections.isNotEmpty(list)){ - data.setTotalMoney(list.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); - data.setTotalRefund(list.stream().filter(i -> Integer.valueOf(-1).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); - } - return new Result().success(data); - } - - @Override - public Result> homeData5(HomeDataRequest hd) { - Integer id = RedisPermissionUtils.getUserPkId(); - String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_5+":"+id; - List list = Collections.emptyList(); - if(!redisUtil.hasKey(key)){ - Date d = new Date(); - list = orderSwapBatteryDao.homeFindHalfYearOrderData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().map(data->{ - HomeData5 homeData5 = new HomeData5(); - BeanUtils.copyProperties(data, homeData5); - homeData5.setTotalMoney(new BigDecimal(data.getTotalMoney()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); - return homeData5; - }).sorted((o1,o2) ->{ - return o1.getMonth().compareTo(o2.getMonth()); - }).collect(Collectors.toList()); - redisUtil.set(key, JSONUtil.toJsonStr(list)); - }else{ - list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData5.class); - } - // 1. 找出6个月\ - Date d = new Date(); - return new Result>().success(list); - } - - @Override - public Result> homeData6(HomeDataRequest hd) { - Integer id = RedisPermissionUtils.getUserPkId(); - String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_6+":"+id; - List list = Collections.emptyList(); - if(!redisUtil.hasKey(key)){ - Date d = new Date(); - Map> mapList= orderSwapBatteryDao.homeFindHalfYearAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().collect(Collectors.groupingBy(HomeOrderSwapBatteryHalfYearAmountDto::getMonth)); - Iterator it = mapList.keySet().iterator(); - while (it.hasNext()){ - String month = it.next(); - HomeData6 homeData6 = new HomeData6(); - homeData6.setMonth(month); -// List values = mapList.get(month); -// HomeOrderSwapBatteryHalfYearAmountDto wechat = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(2).equals(f.getPayType())).findFirst().orElse(null); -// if(ObjectUtils.isNotEmpty(wechat)){ -// homeData6.setInQuantity(wechat.getQuantity()); -// homeData6.setInMoney(wechat.getTotalMoney()); -// } // -// HomeOrderSwapBatteryHalfYearAmountDto account = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(1).equals(f.getPayType())).findFirst().orElse(null); -// if(ObjectUtils.isNotEmpty(account)){ -// homeData6.setWalletQuantity(account.getQuantity()); -// homeData6.setWalletMoney(account.getTotalMoney()); -// } // -// List refund = values.stream().filter(f -> Integer.valueOf(-1).equals(f.getStatus())).collect(Collectors.toList()); -// if(Collections.isNotEmpty(refund)){ -// homeData6.setRefundQuantity(refund.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); -// homeData6.setRefundMoney(refund.stream().collect(Collectors.summingDouble(i -> i.getTotalMoney()))); -// } - list.add(homeData6); - } - list = list.stream().sorted((o1,o2) ->{ - return o1.getMonth().compareTo(o2.getMonth()); - }).collect(Collectors.toList()); - redisUtil.set(key, JSONUtil.toJsonStr(list)); - }else{ - list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData6.class); - } - return new Result>().success(list); - } +// +// @Override +// public Result homeData1(HomeDataRequest hd) { +// // 1. 运营商 +// List list1 = proxyOperaterDao.selectList(new LambdaQueryWrapper() +// .eq(StringUtils.hasText(hd.getPoCode()), ProxyOperater::getPocode, hd.getPoCode())); +// HomeData1 data = new HomeData1(); +// data.setProxyer(list1.size()); +// // 2. 换电站 +// List list2 = batteryStationDao.selectList(new LambdaQueryWrapper() +// .eq(BatteryStation::getDelFlag, 0) +// .eq(StringUtils.hasText(hd.getPoCode()), BatteryStation::getProxyId, hd.getPoCode()) +// .eq(StringUtils.hasText(hd.getStationCode()), BatteryStation::getCode, hd.getStationCode()).select(BatteryStation::getStatus)); +// data.setTotalStation(list2.size()); +// int size1 = list2.stream().filter(i -> i.getStatus() == 1).toList().size(); +// data.setWorkStation(size1); +// // 电池 +// List list3 = batteryStationDcDao.selectList(new LambdaQueryWrapper() +// .eq(BatteryStationDc::getDelFlag, 0) +// .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationDc::getSourceCode, hd.getStationCode()).select(BatteryStationDc::getStatus)); +// data.setTotalDC(list3.size()); +// int dcSize1 = list3.stream().filter(i -> i.getStatus() == 2).toList().size(); +// data.setChargeDC(dcSize1); +// int dcSize2 = list3.stream().filter(i -> i.getStatus() == 3).toList().size(); +// data.setAvailableDC(dcSize2); +// // 机器人 +// List list4 = batteryStationRobotDao.selectList(new LambdaQueryWrapper() +// .eq(StringUtils.hasText(hd.getStationCode()), BatteryStationRobot::getStationCode, hd.getStationCode()).select(BatteryStationRobot::getStatus)); +// data.setTotalRobot(list4.size()); +// int robotSize1 = list4.stream().filter(i -> i.getStatus() == 1).toList().size(); +// data.setAvailableRobot(robotSize1); +// +// return new Result().success(data); +// } +// +// @Override +// public Result homeData2() { +// HomeData2 data = new HomeData2(); +// // 1. 公司 +// Long count1 = companyDao.selectCount(new LambdaQueryWrapper().select(Company::getPkId)); +// data.setConpany(count1.intValue()); +// // 2. 用户 +// Long count2 = wechatUserDao.selectCount(new LambdaQueryWrapper().select(WechatUser::getPkId)); +// data.setTotalUser(count2.intValue()); +// // 3. 车辆 +// Long count3 = vehicleInfoDao.selectCount(new LambdaQueryWrapper().select(VehicleInfo::getPkId)); +// data.setTotalCar(count3.intValue()); +// +// return new Result().success(data); +// } +// +// @Override +// public Result homeData3(HomeDataRequest hd) { +// if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { +// return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); +// } +// HomeData3 data = new HomeData3(); +// data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); +// data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); +// +// List list = orderDao.homeFindProportionData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); +// if(Collections.isNotEmpty(list)){ +// Long total = list.stream().collect(Collectors.summingLong(i -> i.getQuantity())); +// data.setQuantity(total); +// } +// data.setStationOrderDataList(list);; +// return new Result().success(data); +// } +// +// @Override +// public Result homeData4(HomeDataRequest hd) { +// if (hd.getTimeBegin() == null || hd.getTimeEnd() == null) { +// return new Result().error(CodeMsg.PARAM_ERROR,"时间范围未填写!"); +// } +// HomeData4 data = new HomeData4(); +// data.setDayBegin(DateUtil.format(hd.getTimeBegin(), DatePattern.PURE_DATE_PATTERN)); +// data.setDayEnd(DateUtil.format(hd.getTimeEnd(), DatePattern.PURE_DATE_PATTERN)); +// +// List list = orderDao.homeFindAmountData(new HomeRequestDto(hd.getTimeBegin(), hd.getTimeEnd())); +// if(Collections.isNotEmpty(list)){ +// data.setTotalMoney(list.stream().filter(i -> Integer.valueOf(7).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); +// data.setTotalRefund(list.stream().filter(i -> Integer.valueOf(-1).equals(i.getStatus())).collect(Collectors.summingDouble(i -> i.getAmount()))); +// } +// return new Result().success(data); +// } +// +// @Override +// public Result> homeData5(HomeDataRequest hd) { +// Integer id = RedisPermissionUtils.getUserPkId(); +// String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_5+":"+id; +// List list = Collections.emptyList(); +// if(!redisUtil.hasKey(key)){ +// Date d = new Date(); +// list = orderDao.homeFindHalfYearOrderData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().map(data->{ +// HomeData5 homeData5 = new HomeData5(); +// BeanUtils.copyProperties(data, homeData5); +// homeData5.setTotalMoney(new BigDecimal(data.getTotalMoney()).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); +// return homeData5; +// }).sorted((o1,o2) ->{ +// return o1.getMonth().compareTo(o2.getMonth()); +// }).collect(Collectors.toList()); +// redisUtil.set(key, JSONUtil.toJsonStr(list)); +// }else{ +// list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData5.class); +// } +// // 1. 找出6个月\ +// Date d = new Date(); +// return new Result>().success(list); +// } +// +// @Override +// public Result> homeData6(HomeDataRequest hd) { +// Integer id = RedisPermissionUtils.getUserPkId(); +// String key = HDConstant.LOGIN_CACHE_KEY_PREFIX + HDConstant.IndexConstant.HOME_DATA_6+":"+id; +// List list = Collections.emptyList(); +// if(!redisUtil.hasKey(key)){ +// Date d = new Date(); +// Map> mapList= orderDao.homeFindHalfYearAmountData(new HomeRequestDto(DateUtil.offsetMonth(d, -6), d)).stream().collect(Collectors.groupingBy(HomeOrderSwapBatteryHalfYearAmountDto::getMonth)); +// Iterator it = mapList.keySet().iterator(); +// while (it.hasNext()){ +// String month = it.next(); +// HomeData6 homeData6 = new HomeData6(); +// homeData6.setMonth(month); +//// List values = mapList.get(month); +//// HomeOrderSwapBatteryHalfYearAmountDto wechat = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(2).equals(f.getPayType())).findFirst().orElse(null); +//// if(ObjectUtils.isNotEmpty(wechat)){ +//// homeData6.setInQuantity(wechat.getQuantity()); +//// homeData6.setInMoney(wechat.getTotalMoney()); +//// } +//// +//// HomeOrderSwapBatteryHalfYearAmountDto account = values.stream().filter(f -> Integer.valueOf(7).equals(f.getStatus()) && Integer.valueOf(1).equals(f.getPayType())).findFirst().orElse(null); +//// if(ObjectUtils.isNotEmpty(account)){ +//// homeData6.setWalletQuantity(account.getQuantity()); +//// homeData6.setWalletMoney(account.getTotalMoney()); +//// } +//// +//// List refund = values.stream().filter(f -> Integer.valueOf(-1).equals(f.getStatus())).collect(Collectors.toList()); +//// if(Collections.isNotEmpty(refund)){ +//// homeData6.setRefundQuantity(refund.stream().collect(Collectors.summingLong(i -> i.getQuantity()))); +//// homeData6.setRefundMoney(refund.stream().collect(Collectors.summingDouble(i -> i.getTotalMoney()))); +//// } +// list.add(homeData6); +// } +// list = list.stream().sorted((o1,o2) ->{ +// return o1.getMonth().compareTo(o2.getMonth()); +// }).collect(Collectors.toList()); +// redisUtil.set(key, JSONUtil.toJsonStr(list)); +// }else{ +// list = JSONUtil.toList(redisUtil.getStringValue(key), HomeData6.class); +// } +// return new Result>().success(list); +// } +// +// @Override +// public Result homeData7(Integer type) { +// HomeData7 data = new HomeData7(); +// Date d = new Date(); +// // 按月 +// Date month = DateUtil.beginOfMonth(d); +// Date beforeMonth = DateUtil.offsetMonth(month, -1); +// Date beforeYearMonth = DateUtil.offsetYear(d, -1); +// data.setMonth(DateUtil.format(month, "yyyy-MM")); +// //订单数量 +// data.setQuantity(orderDao.homeFindOrderCountData(month)); +// data.setTradeAmount(orderDao.homeFindOrderAmountData(month)); +// //环比 +// data.setLastMonthQuantity(orderDao.homeFindOrderCountData(beforeMonth)); +// data.setLastMonthTradeAmount(orderDao.homeFindOrderAmountData(beforeMonth)); +// //同比 +// data.setLastYearQuantity(orderDao.homeFindOrderCountData(beforeYearMonth)); +// data.setLastYearTradeAmount(orderDao.homeFindOrderAmountData(beforeYearMonth)); +// return new Result().success(data); +// } - @Override - public Result homeData7(Integer type) { - HomeData7 data = new HomeData7(); - Date d = new Date(); - // 按月 - Date month = DateUtil.beginOfMonth(d); - Date beforeMonth = DateUtil.offsetMonth(month, -1); - Date beforeYearMonth = DateUtil.offsetYear(d, -1); - data.setMonth(DateUtil.format(month, "yyyy-MM")); - //订单数量 - data.setQuantity(orderSwapBatteryDao.homeFindOrderCountData(month)); - data.setTradeAmount(orderSwapBatteryDao.homeFindOrderAmountData(month)); - //环比 - data.setLastMonthQuantity(orderSwapBatteryDao.homeFindOrderCountData(beforeMonth)); - data.setLastMonthTradeAmount(orderSwapBatteryDao.homeFindOrderAmountData(beforeMonth)); - //同比 - data.setLastYearQuantity(orderSwapBatteryDao.homeFindOrderCountData(beforeYearMonth)); - data.setLastYearTradeAmount(orderSwapBatteryDao.homeFindOrderAmountData(beforeYearMonth)); - return new Result().success(data); - } - - @Override - public void loginData() { - HomeDataRequest hd = new HomeDataRequest(); - homeData5(hd); - homeData6(hd); - } +// @Override +// public void loginData() { +// HomeDataRequest hd = new HomeDataRequest(); +// homeData5(hd); +// homeData6(hd); +// } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java index 8e8f4a2..64a2960 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/MessageMqttServiceImpl.java @@ -1,21 +1,23 @@ package com.evotech.hd.cloud.service.impl; -import java.util.Date; -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.util.StringUtils; - +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.dao.MessageMqttDao; import com.evotech.hd.cloud.entity.MessageMqtt; import com.evotech.hd.cloud.entity.request.PageListMessageMqttRequest; +import com.evotech.hd.cloud.entity.vo.MqttMessageParam; import com.evotech.hd.cloud.service.MessageMqttService; import com.evotech.hd.common.core.entity.Result; import com.evotech.hd.common.core.enums.CodeMsg; - +import com.evotech.hd.common.core.utils.Collections; import jakarta.annotation.Resource; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; @Service @@ -56,4 +58,16 @@ public class MessageMqttServiceImpl implements MessageMqttService { return null; } + @Override + public MessageMqtt getOne(MqttMessageParam param) { + List list = messageMqttDao.selectList(new LambdaQueryWrapper() + .eq(MessageMqtt::getStationCode, param.getStationCode()) + .eq(MessageMqtt::getDirection, param.getDirection()) + .eq(MessageMqtt::getType, param.getType()) + .apply(" DATE_FORMAT(ctime,'%Y-%m-%d') ={0}", DateFormatUtils.format(param.getCtime(), "yyyy-MM-dd")) + .apply(" content->'$.dataBody.orderNo'={1}", param.getOrderNo()) + .eq(MessageMqtt::getMessageFunction, param.getMessageFunction()).orderByDesc(MessageMqtt::getCtime)); + return (Collections.isNotEmpty(list) ? list.get(0) : null); + } + } 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 new file mode 100644 index 0000000..ae5c597 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderServiceImpl.java @@ -0,0 +1,125 @@ +package com.evotech.hd.cloud.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.evotech.hd.cloud.dao.OrderDao; +import com.evotech.hd.cloud.dao.OrderDetailDao; +import com.evotech.hd.cloud.entity.order.Order; +import com.evotech.hd.cloud.entity.order.OrderDetail; +import com.evotech.hd.cloud.service.OrderService; +import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +import com.evotech.hd.common.core.Dto.Result; +import com.evotech.hd.common.core.Dto.order.OrderListVo; +import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +import com.evotech.hd.common.core.enums.OrderStatusEnums; +import com.evotech.hd.common.web.util.EnumUtils; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.Date; +import java.util.function.Function; + +/** + * 订单的业务实现类 + * + * @ClassName:OrderServiceImpl + * @date: 2025年05月16日 13:58 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ + +@Service +public class OrderServiceImpl extends BaseServiceImpl implements OrderService { + @Resource + private OrderDetailDao orderDetailDao; + @Resource + private SwapOrderBasicFeeComponent orderBasicFeeComponent; + + @Override + public Result> pageList(PageListSwapOrderRequest plsor) { + + return new Result>().success(selectPage(new Page(plsor.getPageNo(), plsor.getPageSize()), new LambdaQueryWrapper() + .eq(StringUtils.isNotEmpty(plsor.getOrderNo()), Order::getOrderNo, plsor.getOrderNo()) + .eq(StringUtils.isNotEmpty(plsor.getPlateNum()), Order::getPlateNum, plsor.getPlateNum()) + .ge(ObjectUtils.isNotEmpty(plsor.getOrderTimeBegin()), Order::getOrderTime, plsor.getOrderTimeBegin()) + .le(ObjectUtils.isNotEmpty(plsor.getOrderTimeEnd()), Order::getOrderTime, plsor.getOrderTimeEnd()) + .eq(StringUtils.isNotEmpty(plsor.getStationCode()), Order::getStationCode, plsor.getStationCode()) + .eq(StringUtils.isNotEmpty(plsor.getTradeNo()), Order::getNotifyOrderNo, plsor.getTradeNo()) + .ne(Order::getDelFlag, 1) + .orderByDesc(Order::getOrderTime), new Function() { + @Override + public OrderListVo apply(Order order) { + OrderListVo vo = new OrderListVo(); + BeanUtils.copyProperties(order, vo); + return vo; + } + })); + } + + @Override + public Result calculateCost(Order order) { + //查询详情数据, 检查详情相关数据是否存在 + OrderDetail orderDetail = orderDetailDao.selectOne(new LambdaQueryWrapper().eq(OrderDetail::getOrderId, order.getPkId()), false); + if(ObjectUtils.isEmpty(orderDetail)){ + return new Result().error("当前订单没有订单详情,无法处理"); + } + // 2. 检查数据 + if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) { + orderDetail = orderBasicFeeComponent.orderBasicFee(order, orderDetail); + if (orderDetail.getServiceFee() == null || orderDetail.getUnitPrice() == null) { + return new Result().error("订单费用标准异常!"); + } + } + // 2. 检查消耗量 + if (orderDetail.getElectricityQuantity() == null) { + orderDetail = orderBasicFeeComponent.calculateElectricityQuantity(order, orderDetail); + if (orderDetail.getElectricityQuantity() == null) { + return new Result().error("订单消费统计信息异常!"); + } + } + // 3. 选择费用计算方式 计算费用, 这里计算出来直接就是分 + BigDecimal orderFee = new BigDecimal(orderDetail.getUnitPrice()).multiply(new BigDecimal(orderDetail.getElectricityQuantity())).setScale(0, RoundingMode.HALF_UP); + //订单价格 + orderDetail.setOrderFee(orderFee.intValue()); + // 4. 跟新订单 + order.setOrderAmount(orderFee.add(new BigDecimal(orderDetail.getServiceFee())).intValue()); + order.setStatus(OrderStatusEnums.TOPAY.getCode()); + getBaseMapper().updateById(order); + //更新订单详情 + orderDetailDao.updateById(orderDetail); + return new Result().success(""); + } + + + + @Override + public Result updateStatus(String orderNo, Integer status) { + //根据订单编码查询此订单 + Order order = getBaseMapper().selectOne(new LambdaQueryWrapper().eq(Order::getOrderNo, orderNo)); + if (order == null) { + return new Result().error("订单不存在", false); + } + // 2.如果当前是关闭状态, 检查当前订单是否只是创建状态, 如果不是创建状态, 返回无法关闭 + if (OrderStatusEnums.CANCLE.getCode().equals(status) && !OrderStatusEnums.CREATE.getCode().equals(order.getStatus())) { + return new Result().error("当前状态不允许关闭,订单状态:" + EnumUtils.getEnumPropertyValue(OrderStatusEnums.class, order.getStatus()), false); + } + order.setStatus(status); + order.setUpdateTime(new Date()); + // 3.更新订单状态 + if (getBaseMapper().updateById(order) > 0){ + return new Result().success(true); + }else{ + return new Result().error((OrderStatusEnums.CANCLE.getCode().equals(status) ? "取消订单失败" : "订单状态调整失败"), false); + } + + } + +} + + diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java new file mode 100644 index 0000000..833c7b6 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryPreServiceImpl.java @@ -0,0 +1,72 @@ +package com.evotech.hd.cloud.service.impl; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.evotech.hd.cloud.dao.BatteryStationDao; +import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; +import com.evotech.hd.cloud.service.OrderSwapBatteryPreService; +import com.evotech.hd.common.core.entity.cloud.BatteryStation; +import com.evotech.hd.common.core.entity.cloud.OrderSwapBatteryPre; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + * 类 + * + * @ClassName:OrderSwapBatteryreServiceImpl + * @date: 2025年05月19日 16:18 + * @author: andy.shi + * @contact: 17330188597 + * @remark: 开发人员联系方式 1042025947@qq.com/微信同步 + */ +@Slf4j +@Service +public class OrderSwapBatteryPreServiceImpl extends ServiceImpl implements OrderSwapBatteryPreService { + + @Resource + BatteryStationDao batteryStationDao; + + @Override + public Boolean addPreByPlateNum(String plateNum, String stationCode) { + BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).select(BatteryStation::getCode, BatteryStation::getName), false); + // 3. 添加预约 + Date day = new Date(); + OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); + osbp.setSource(3); + osbp.setSourceId(batteryStation.getCode()); + osbp.setUcode("hp_station_push"); + osbp.setUname("慧鹏站端推送"); + osbp.setPhone("12332112345"); + osbp.setPlateNum(plateNum); + osbp.setStationCode(batteryStation.getCode()); + osbp.setStationName(batteryStation.getName()); + osbp.setSwapDay(DateUtil.format(day, DatePattern.PURE_DATE_FORMATTER)); + osbp.setSwapDuration("6:00-20:00"); + osbp.setStatus(1); + osbp.setCtime(osbp.getReservationTime()); + osbp.setCreater("TEST"); + osbp.setReservationTime(osbp.getReservationTime() == null ? day : osbp.getReservationTime()); + osbp.setCtime(day); + getBaseMapper().insert(osbp); + //特殊渠道反推的数据, 不需要发送通知 +// if (n == 1) { +// // 计算过期时间(预约时间后30分钟) +// Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); +// // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 +// String redisKey = "preorder:expire:" + osbp.getPkId(); +// redisUtil.set(redisKey, expireTime); +// // 发送服务号消息,没有消息队列,先用接口吧 +// templateMessageService.preOrderMessageSend(osbp); +// return true; +// } + return true; + + + + } +} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java index 4da8c32..21face2 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/OrderSwapBatteryServiceImpl.java @@ -1,698 +1,155 @@ -package com.evotech.hd.cloud.service.impl; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONConfig; -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson.JSON; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.vo.NativePayVO; -import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.message.MessageTopic; -import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.cloud.service.TaxPointService; -import com.evotech.hd.cloud.service.TradeService; -import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; -import com.evotech.hd.cloud.service.rpc.WechatService; -import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.*; -import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; -import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.common.core.enums.OrderStatusEnums; -import com.evotech.hd.common.core.enums.PayTypeEnums; -import com.evotech.hd.common.core.enums.TradeTypeEnums; -import com.evotech.hd.common.core.utils.CommonUtil; -import com.evotech.hd.common.redis.utils.RedisUtil; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.StringUtils; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -@Slf4j -@Service -public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { - - @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - @Resource - private OrderSwapBatteryPreDao orderSwapBatteryPreDao; - @Resource - private OrderSwapBatteryStepDao orderSwapBatteryStepDao; - @Resource - private VehicleInfoDao vehicleInfoDao; - @Resource - private WechatUserDao wechatUserDao; - @Resource - private SwapOrderBasicFeeComponent orderBasicFeeComponent; - @Resource - private GZHTemplateMessageService templateMessageService; - @Resource - private WalletAccountDao walletAccountDao; - @Resource - private WalletAccountService walletAccountService; - @Resource - private TradeService tradeService; - @Resource - private WechatService wechatService; - @Resource - private MessageUtilService messageUtilService; - @Resource - private RedisUtil redisUtil; - @Resource - private BatteryStationDao batteryStationDao; - @Resource - private GZHTemplateMessageService gzhTemplateMessageService; - @Resource - TaxPointService taxPointService; - - @Override - public Result addPre(OrderSwapBatteryPre osbp) { - // 1. 检查车辆 - LambdaQueryWrapper vehicleQuery = new LambdaQueryWrapper() - .eq(VehicleInfo::getPlateNum, osbp.getPlateNum()) - .select(VehicleInfo::getOwnerType); - - VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(vehicleQuery); - if (vehicleInfo == null) { - return new Result().error("未找到车辆信息"); - } - - // 2. 检查预约人 - boolean b2 = wechatUserDao.exists(new QueryWrapper() - .ne("phone_number", " ") - .isNotNull("phone_number") - .eq("wuid", osbp.getUcode()) - ); - if (!b2) { - return new Result().error("用户认证信息不全!"); - } - //判断换电站是否运营 - boolean b3 = batteryStationDao.exists(new QueryWrapper() - .eq("code", osbp.getStationCode()) - .eq("status", 1)); - if (!b3){ - return new Result().error("该换电站未运营!"); - } - //判断这个车是不是企业用车 - if (vehicleInfo.getOwnerType() != null && vehicleInfo.getOwnerType()==1 ){ - try { - Long unpaidOrderCount = orderSwapBatteryDao.selectCount(new LambdaQueryWrapper() - .eq(OrderSwapBattery::getOrderPreUid, osbp.getUcode()) - .eq(OrderSwapBattery::getStatus, 6) - .eq(OrderSwapBattery::getOrderPreUname, osbp.getUname()) - ); - - log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", osbp.getUcode(), unpaidOrderCount); - if (unpaidOrderCount >= 3) { - return new Result().error("您有3笔及以上未支付的订单,请先支付!"); - } - } catch (Exception e) { - log.error("检查未支付订单异常,用户编码:{},错误信息:{}", - osbp.getUcode(), e.getMessage()); - return new Result().error("系统异常,请稍后重试"); - } - } - - // 是否需要验证人和车绑定关系 - - // 是否需要验证公司和车的绑定关系 - - // 3. 添加预约 - Date d = new Date(); - osbp.setStatus(1); - osbp.setReservationTime(osbp.getReservationTime() == null ? d : osbp.getReservationTime()); - osbp.setCtime(d); - int n = orderSwapBatteryPreDao.insert(osbp); - if (n == 1) { - // 计算过期时间(预约时间后30分钟) - Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); - // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 - String redisKey = "preorder:expire:" + osbp.getPkId(); - redisUtil.set(redisKey, expireTime); - // 发送服务号消息,没有消息队列,先用接口吧 - templateMessageService.preOrderMessageSend(osbp); - return new Result().success(n); - } - return new Result().error("添加预约换电订单出错!"); - } - - @Override - public Result cancelPre(Integer id, Integer status) { - OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); - osbp.setPkId(id); - osbp.setStatus(status != null? status : 3); - osbp.setUptime(null); - int n = orderSwapBatteryPreDao.updateById(osbp); - if (n == 1) { - return new Result().success(n); - } - return new Result().error("取消预约换电订单失败!"); - } - - @Override - public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException { - Page page = new Page(plsopr.getPageNo(), plsopr.getPageSize()); - page = orderSwapBatteryPreDao.selectPage(page, new LambdaQueryWrapper() - .eq(StringUtils.hasText(plsopr.getUcode()), OrderSwapBatteryPre::getUcode, plsopr.getUcode()) - .eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus()) - .eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum()) - .eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode()) -// .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) -// .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) - .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin()) - .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd()) - .orderByDesc(OrderSwapBatteryPre::getPkId)); - if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - return new Result>().success(page); - } - - @Override - public Result add(OrderSwapBattery osb) { - - // 加上费用标准 - osb = orderBasicFeeComponent.orderBasicFee(osb); - osb.setCtime(new Date()); - int n = orderSwapBatteryDao.insert(osb); - if (n == 1) { - return new Result().success(n); - } - return new Result().error("添加换电订单出错!"); - } - - @Override - public Result delete(Integer id) { - OrderSwapBattery osb = new OrderSwapBattery(); - osb.setPkId(id); - osb.setDelFlag(1); - int n = orderSwapBatteryDao.updateById(osb); - if (n == 1) { - return new Result().success(n); - } - throw new RuntimeException("删除换电订单出错!"); - } - - @Override - public Result update(OrderSwapBattery osb) { - osb.setUptime(null); - int n = orderSwapBatteryDao.updateById(osb); - if (n == 1) { - return new Result().success(n); - } - return new Result().error("更新换电订单失败!"); - } - - @Override - public Result> list(PageListSwapOrderRequest plsor) { - Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); - List plateNumList = new ArrayList(); - if (StringUtils.hasText(plsor.getCcode())) { - List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); - if (vehicleList.isEmpty()) { - return new Result>().error("未发现该公司车辆"); - } - plateNumList = vehicleList.stream().map(VehicleInfo::getPlateNum).toList(); - } else if (StringUtils.hasText(plsor.getPlateNums())) { - plateNumList = Arrays.asList(plsor.getPlateNums().split(",")); - } - List statusList = new ArrayList(); - if (StringUtils.hasText(plsor.getStatus())) { - statusList = Arrays.asList(plsor.getStatus().split(",")).stream().map(Integer::valueOf).toList(); - } - - page = orderSwapBatteryDao.selectPage(page, new LambdaQueryWrapper() - .eq(StringUtils.hasText(plsor.getOrderNo()), OrderSwapBattery::getOrderNo, plsor.getOrderNo()) - .eq(StringUtils.hasText(plsor.getPlateNum()), OrderSwapBattery::getPlateNum, plsor.getPlateNum()) - .in(!plateNumList.isEmpty(), OrderSwapBattery::getPlateNum, plateNumList) - .in(!statusList.isEmpty(), OrderSwapBattery::getStatus, statusList) - .ge(plsor.getOrderTimeBegin() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeBegin()) - .le(plsor.getOrderTimeEnd() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeEnd()) - .eq(StringUtils.hasText(plsor.getStationCode()), OrderSwapBattery::getStationCode, plsor.getStationCode()) - .like(StringUtils.hasText(plsor.getStationName()), OrderSwapBattery::getStationName, plsor.getStationName()) - .eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreUid, plsor.getUserId()) - .eq(StringUtils.hasText(plsor.getTradeNo()), OrderSwapBattery::getTradeNo, plsor.getTradeNo()) - .ne(OrderSwapBattery::getDelFlag, 1) - .orderByDesc(OrderSwapBattery::getPkId)); - if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - page.getRecords().forEach(osb -> { - if (StringUtils.hasText(osb.getFeeStandardJson())){ - String feeStandardJson = osb.getFeeStandardJson(); - BatteryStationHdFeeStandard bean = JSONUtil.toBean(feeStandardJson, BatteryStationHdFeeStandard.class); - osb.setFeeStandardDetail(bean); - } - - }); - - return new Result>().success(page); - } - - @Override - public Result> listByCompany(PageListSwapOrderRequest plsor) { - if (!StringUtils.hasText(plsor.getCcode())) { - return new Result>().error("参数错误"); - } - if (plsor.getOrderTimeBegin() == null || plsor.getOrderTimeEnd() == null) { - return new Result>().error("参数错误"); - } - Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); - List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); - if (vehicleList.isEmpty()) { - return new Result>().error("未发现该公司车辆"); - } - List plateNumList = vehicleList.stream().map(i -> i.getPlateNum()).toList(); - page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() - .in("plate_num", plateNumList) - .in(StringUtils.hasText(plsor.getStatus()), "status", plsor.getStatus()) - .ge("order_time", plsor.getOrderTimeBegin()) - .le("order_time", plsor.getOrderTimeEnd()) - .ne("del_flag", 1) - .orderByDesc("pk_id")); - if (page.getRecords().isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - return new Result>().success(page); - } - - @Override - public Result> listStep(String orderNo) { - List list = orderSwapBatteryStepDao.selectList(new QueryWrapper() - .eq("order_no", orderNo)); - if (list.isEmpty()) { - return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); - } - return new Result>().success(list); - } - - @Override - public Result calculateCost1(String orderNo, OrderStatusData statusData) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); - log.info("订单号:{}", JSONUtil.parseObj(order)); - if (order == null) { - return new Result().error("无此订单!"); - } - // 1. 检查状态 - if (order.getStatus() != 3) { - return new Result().error("订单状态异常!"); - } - - // 2. 检查数据 - if (order.getBasicFee() == null || order.getServiceFee() == null) { - order = orderBasicFeeComponent.orderBasicFee(order); - if (order.getBasicFee() == null || order.getServiceFee() == null) { - return new Result().error("订单费用标准异常!"); - } - } - BigDecimal fee; - // 3. 选择费用计算方式 计算费用 - if (order.getFeeType()==3){ - // 电量计算 - if (order.getElectAmount() == null) { - return new Result().error("充电订单充电量异常!"); - } - fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); - - }else if (order.getFeeType() == 2) { - // TODO 按SOC - if (statusData.getRentBatSoc() == null || statusData.getReturnBatSoc() == null) { - return new Result().error("充电订单 SOC 异常!"); - } - // 计算 SOC - BigDecimal socDifference = new BigDecimal(statusData.getRentBatSoc() - statusData.getReturnBatSoc()); - fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); - order.setElectAmount(socDifference); - }else { - return new Result().error("此订单不是按照电量计算"); - } - // 4. 修改订单 - - order.setAmount(fee.intValue()); - order.setStatus(6); - orderSwapBatteryDao.updateById(order); - log.info("订单费用计算完成:{}", JSONUtil.parseObj(order)); - gzhTemplateMessageService.orderMessageSend2(order.getPkId(),2); - return new Result().success(fee); - } - - - - @Override - public Result calculateCost(OrderSwapBattery order) { - // 2. 检查数据 - if (order.getBasicFee() == null || order.getServiceFee() == null) { - order = orderBasicFeeComponent.orderBasicFee(order); - if (order.getBasicFee() == null || order.getServiceFee() == null) { - return new Result().error("订单费用标准异常!"); - } - } - // 3. 选择费用计算方式 计算费用 - BigDecimal fee = BigDecimal.ZERO; - if (order.getFeeType() == 3) { - // 先按电量计算 - if (order.getElectAmount() == null) { - return new Result().error("充电订单 充电量 异常!"); - } - //基础费用*充电总量 - fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); - } else if (order.getFeeType() == 2) { - // TODO 按SOC - if (order.getReturnBatSoc() == null || order.getRentBatSoc() == null) { - return new Result().error("充电订单 SOC 异常!"); - } - // 计算 SOC - BigDecimal socDifference = new BigDecimal(order.getRentBatSoc() - order.getReturnBatSoc()); - fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); - - } else if (order.getFeeType() == 1) { - // TODO 按里程 - - } else { - - } - // 4. 修改订单 - order.setAmount(fee.intValue()); - order.setStatus(6); - order.setUptime(null); - orderSwapBatteryDao.updateById(order); - return new Result().success(fee); - } - - - @Override - @Transactional - public Result walletPay(String orderNo, String wuid, String uname) { - // 订单 - OrderSwapBattery order = orderSwapBatteryDao - .selectOne(new QueryWrapper().eq("order_no", orderNo)); - if (order.getStatus() != OrderStatusEnums.TOPAY.getCode()) { - return new Result().error("订单异常!"); - } - if (order.getAmount() < 1) { - return new Result().error("订单金额异常!"); - } - // 账户 - WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper() - .eq("owner_id", wuid)); - if (wallet == null) { - return new Result().error("钱包账户异常!"); - } - if (wallet.getTotalAmount() < order.getAmount()) { - return new Result().error("钱包余额不足!"); - } - - - // 添加交易 - TradeDetail trade = new TradeDetail(); - trade.setOutTradeNo(CommonUtil.payTradeNo(2)); - trade.setTrader(uname); - trade.setTraderCode(wuid); - trade.setTradeType(TradeTypeEnums.PAYORDER.getCode()); - trade.setOrderCount(1); - trade.setOrderNo(orderNo); - trade.setTradeAmount(order.getAmount()); - trade.setPayType(PayTypeEnums.WALLET.getCode()); - trade.setPayResult("SUCCESS"); - trade.setPayMsg("OK"); - trade.setPayer(wuid); - trade.setWallet(wallet.getCode()); - trade.setPayTime(new Date()); - tradeService.add(trade); - - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - wad.setPreTotalAmount(wallet.getTotalAmount()); - wad.setPreRechargeAmount(wallet.getRechargeAmount()); - wad.setPreGiftAmount(0); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(-order.getAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setCode(wallet.getCode()); - wad.setTradeType(trade.getTradeType()); - wad.setTradeNo(trade.getOutTradeNo()); - - wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); - wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount())); - - wad.setOrderNo(orderNo); - wad.setPlateNum(order.getPlateNum()); - wad.setStationName(order.getStationName());//添加订单关联关系及车牌号,站点信息0419 - walletAccountService.addDetail(wad); - // 改余额 - wallet.setTotalAmount(wad.getAfterTotalAmount()); - wallet.setRechargeAmount(wad.getAfterRechargeAmount()); - wallet.setUptime(null); - walletAccountDao.updateById(wallet); - - // 修改订单状态 - order.setStatus(OrderStatusEnums.FINISH.getCode()); - order.setTradeNo(trade.getOutTradeNo()); - order.setUptime(null); - orderSwapBatteryDao.updateById(order); - - //税点信息记录 - try { - taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getAmount()), order.getStationCode()); - } catch (Exception e) { - log.error("余额支付=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); - } - - return new Result().success("OK"); - } - - @Override - public Result companyNativePay(NativePayVO prePay) { - return wechatService.wechatNativePay(prePay); - } - - @Override - public Result orderQuery(String outTradeNo) { - return wechatService.orderQuery(2, outTradeNo); - } - - @Override - public Result cancelOrder(String orderNo, Integer status) { - //根据订单编码查询此订单 - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); - // 1. 查看订单是否存在 - OrderSwapBattery cancelOr = new OrderSwapBattery(); - if (order == null) { - return new Result().error("订单不存在"); - } - // 2. 校验当前状态是否允许取消 - if (!Arrays.asList(3,4,5,6,7).contains(order.getStatus())) { - return new Result().error("当前状态不允许取消,订单状态:" + order.getStatus()); - } - cancelOr.setPkId(order.getPkId()); - cancelOr.setStatus(9); - cancelOr.setUptime(new Date()); - // 3.更新订单状态 - int i = orderSwapBatteryDao.updateById(cancelOr); - if (i==1){ - return new Result().success(i); - }else{ - return new Result().error("取消换电订单失败"); - } - - } - - @Override - public Result markOrderAsExpired(Integer pkId) { - OrderSwapBatteryPre orderSwapBatteryPre = orderSwapBatteryPreDao.selectById(pkId); - orderSwapBatteryPre.setStatus(3); - int re = orderSwapBatteryPreDao.updateById(orderSwapBatteryPre); - if (re==1){ - return new Result().success(re); - } - else{ - return new Result().error("换电预约订单失败"); - } - } - - @Override - public Result startSwap(String wuid, String orderId) { - if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { - log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId); - return new Result().error("换电请求参数无效"); - } - - // 获取用户订单 - OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); - if (orderSwap == null) { - log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); - return new Result().error("未找到符合条件的订单"); - } - - try { - log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid); - - // 构建换电请求消息 - BatterySwapReq batterySwapReq = new BatterySwapReq(); - batterySwapReq.setOrderNo(orderSwap.getOrderNo()); - batterySwapReq.setMsg("换电开始"); - - // 设置消息主题和头部信息 - MessageTopic topic = new MessageTopic(); - topic.setDataDirection("M2S"); - topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType()); - - MqttMessageHeader header = new MqttMessageHeader(); - header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction()); - header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); - - // 发送消息给站端 - messageUtilService.publishAESMessage(topic, header, - JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); - - log.info("换电开始消息发送成功, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().success(true); - - } catch (Exception e) { - log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid, e); - return new Result().error("系统处理换电请求时发生异常"); - } - } - - @Override - public Result getStartSwap(String wuid, String orderId) { - // 参数校验 - if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { - log.warn("获取换电状态参数无效, wuid: {}, orderId: {}", wuid, orderId); - return new Result().error("参数无效"); - } - - // 获取用户订单 - OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); - if (orderSwap == null) { - log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); - return new Result().error("未找到符合条件的订单"); - } - - try { - // 从 Redis 中获取换电信息 - String redisKey = "battery:" + orderSwap.getOrderNo(); - Object o = redisUtil.get(redisKey); - if (ObjectUtil.isEmpty(o)) { - log.info("未收到换电成功信息, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().error("未收到换电成功信息"); - } - - // 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象 - BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class); - if (response == null) { - log.error("换电响应数据解析失败, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().error("换电响应数据解析失败"); - } - - if (response.getCode() == 1) { - log.info("换电成功, 订单编号: {}", orderSwap.getOrderNo()); - return new Result().success(response); - } else { - log.warn("换电失败, 订单编号: {}, 错误信息: {}", orderSwap.getOrderNo(), response.getMsg()); - return new Result().error(response.getMsg()); - } - } catch (Exception e) { - log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), e); - return new Result().error("系统获取换电状态时发生异常"); - } - } - - - @Override - public Result checkList(PageListSwapOrderRequest plsor) { - - Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); - List statusList = new ArrayList(); - String strs= "1,2,3,4,5,6"; - if (StringUtils.hasText(strs)) {//订单状态"已完成"之前的状态 - statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList(); - } - - page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() - .eq(StringUtils.hasText(plsor.getOrderNo()), "order_no", plsor.getOrderNo()) - .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) - .in(!statusList.isEmpty(), "status", statusList) - .ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin()) - .le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd()) - .eq(StringUtils.hasText(plsor.getStationCode()), "station_code", plsor.getStationCode()) - .like(StringUtils.hasText(plsor.getStationName()), "station_name", plsor.getStationName()) - .eq(StringUtils.hasText(plsor.getUserId()), "order_pre_uid", plsor.getUserId()) - .eq(StringUtils.hasText(plsor.getTradeNo()), "trade_no", plsor.getTradeNo()) - .ne("del_flag", 1) - .orderByDesc("pk_id")); - if (!page.getRecords().isEmpty()) { - return new Result().error("该车辆有未结算的订单,请确认后重试!"); - } - - - /*Page page1 = new Page(plsor.getPageNo(), plsor.getPageSize()); - page1 = orderSwapBatteryPreDao.selectPage(page1, new QueryWrapper() - .eq(StringUtils.hasText("1"), "status", "1") - .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) - .orderByDesc("pk_id")); - if (!page1.getRecords().isEmpty()) { - return new Result().error("该车辆有预约成功的订单,请处理后重试!"); - }*/ - - - return new Result().success(0); - } - - - @Override - public Boolean addPreByPlateNum(String PlateNum, String stationCode) { - BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).select(BatteryStation::getCode, BatteryStation::getName), false); - // 3. 添加预约 - Date day = new Date(); - OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); - osbp.setSource(3); - osbp.setSourceId(batteryStation.getCode()); - osbp.setUcode("hp_station_push"); - osbp.setUname("慧鹏站端推送"); - osbp.setPhone("12332112345"); - osbp.setPlateNum(PlateNum); - osbp.setStationCode(batteryStation.getCode()); - osbp.setStationName(batteryStation.getName()); - osbp.setSwapDay(DateUtil.format(day, DatePattern.PURE_DATE_FORMATTER)); - osbp.setSwapDuration("6:00-20:00"); - osbp.setStatus(1); - osbp.setCtime(osbp.getReservationTime()); - osbp.setCreater("TEST"); - osbp.setReservationTime(osbp.getReservationTime() == null ? day : osbp.getReservationTime()); - osbp.setCtime(day); - int n = orderSwapBatteryPreDao.insert(osbp); - //特殊渠道反推的数据, 不需要发送通知 +//package com.evotech.hd.cloud.service.impl; +// +//import cn.hutool.core.date.DatePattern; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.ObjectUtil; +//import cn.hutool.core.util.StrUtil; +//import cn.hutool.json.JSONConfig; +//import cn.hutool.json.JSONUtil; +//import com.alibaba.fastjson.JSON; +//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +//import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +//import com.evotech.hd.cloud.dao.*; +//import com.evotech.hd.cloud.entity.vo.NativePayVO; +//import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +//import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +//import com.evotech.hd.cloud.mqtt.message.MessageTopic; +//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatterySwapReq; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +//import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +//import com.evotech.hd.cloud.service.OrderSwapBatteryService; +//import com.evotech.hd.cloud.service.TaxPointService; +//import com.evotech.hd.cloud.service.TradeService; +//import com.evotech.hd.cloud.service.WalletAccountService; +//import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; +//import com.evotech.hd.cloud.service.rpc.WechatService; +//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +//import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +//import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.*; +//import com.evotech.hd.common.core.entity.cloud.request.BatterySwapResponse; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderPreRequest; +//import com.evotech.hd.common.core.entity.cloud.request.PageListSwapOrderRequest; +//import com.evotech.hd.common.core.entity.wechat.WechatUser; +//import com.evotech.hd.common.core.enums.CodeMsg; +//import com.evotech.hd.common.core.enums.OrderStatusEnums; +//import com.evotech.hd.common.core.enums.PayTypeEnums; +//import com.evotech.hd.common.core.enums.TradeTypeEnums; +//import com.evotech.hd.common.core.utils.CommonUtil; +//import com.evotech.hd.common.redis.utils.RedisUtil; +//import jakarta.annotation.Resource; +//import lombok.extern.slf4j.Slf4j; +//import org.springframework.stereotype.Service; +//import org.springframework.transaction.annotation.Transactional; +//import org.springframework.util.StringUtils; +// +//import java.math.BigDecimal; +//import java.math.RoundingMode; +//import java.text.ParseException; +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.Date; +//import java.util.List; +// +//@Slf4j +//@Service +//public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { +// +// @Resource +// private OrderSwapBatteryDao orderSwapBatteryDao; +// @Resource +// private OrderSwapBatteryPreDao orderSwapBatteryPreDao; +// @Resource +// private OrderSwapBatteryStepDao orderSwapBatteryStepDao; +// @Resource +// private VehicleInfoDao vehicleInfoDao; +// @Resource +// private WechatUserDao wechatUserDao; +// @Resource +// private SwapOrderBasicFeeComponent orderBasicFeeComponent; +// @Resource +// private GZHTemplateMessageService templateMessageService; +// @Resource +// private WalletAccountDao walletAccountDao; +// @Resource +// private WalletAccountService walletAccountService; +// @Resource +// private TradeService tradeService; +// @Resource +// private WechatService wechatService; +// @Resource +// private MessageUtilService messageUtilService; +// @Resource +// private RedisUtil redisUtil; +// @Resource +// private BatteryStationDao batteryStationDao; +// @Resource +// private GZHTemplateMessageService gzhTemplateMessageService; +// @Resource +// TaxPointService taxPointService; +// +// @Override +// public Result addPre(OrderSwapBatteryPre osbp) { +// // 1. 检查车辆 +// LambdaQueryWrapper vehicleQuery = new LambdaQueryWrapper() +// .eq(VehicleInfo::getPlateNum, osbp.getPlateNum()) +// .select(VehicleInfo::getOwnerType); +// +// VehicleInfo vehicleInfo = vehicleInfoDao.selectOne(vehicleQuery); +// if (vehicleInfo == null) { +// return new Result().error("未找到车辆信息"); +// } +// +// // 2. 检查预约人 +// boolean b2 = wechatUserDao.exists(new QueryWrapper() +// .ne("phone_number", " ") +// .isNotNull("phone_number") +// .eq("wuid", osbp.getUcode()) +// ); +// if (!b2) { +// return new Result().error("用户认证信息不全!"); +// } +// //判断换电站是否运营 +// boolean b3 = batteryStationDao.exists(new QueryWrapper() +// .eq("code", osbp.getStationCode()) +// .eq("status", 1)); +// if (!b3){ +// return new Result().error("该换电站未运营!"); +// } +// //判断这个车是不是企业用车 +// if (vehicleInfo.getOwnerType() != null && vehicleInfo.getOwnerType()==1 ){ +// try { +// Long unpaidOrderCount = orderSwapBatteryDao.selectCount(new LambdaQueryWrapper() +// .eq(OrderSwapBattery::getOrderPreUid, osbp.getUcode()) +// .eq(OrderSwapBattery::getStatus, 6) +// .eq(OrderSwapBattery::getOrderPreUname, osbp.getUname()) +// ); +// +// log.info("检查用户未支付订单,用户编码:{},未支付订单数:{}", osbp.getUcode(), unpaidOrderCount); +// if (unpaidOrderCount >= 3) { +// return new Result().error("您有3笔及以上未支付的订单,请先支付!"); +// } +// } catch (Exception e) { +// log.error("检查未支付订单异常,用户编码:{},错误信息:{}", +// osbp.getUcode(), e.getMessage()); +// return new Result().error("系统异常,请稍后重试"); +// } +// } +// +// // 是否需要验证人和车绑定关系 +// +// // 是否需要验证公司和车的绑定关系 +// +// // 3. 添加预约 +// Date d = new Date(); +// osbp.setStatus(1); +// osbp.setReservationTime(osbp.getReservationTime() == null ? d : osbp.getReservationTime()); +// osbp.setCtime(d); +// int n = orderSwapBatteryPreDao.insert(osbp); // if (n == 1) { // // 计算过期时间(预约时间后30分钟) // Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); @@ -701,31 +158,574 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { // redisUtil.set(redisKey, expireTime); // // 发送服务号消息,没有消息队列,先用接口吧 // templateMessageService.preOrderMessageSend(osbp); -// return true; +// return new Result().success(n); // } - return true; - - - - } - - @Override - public List findOrderSwapBatteryPreList(String stationCode) { - return orderSwapBatteryPreDao.selectList(new LambdaQueryWrapper() - .eq(OrderSwapBatteryPre::getStationCode, stationCode) -// .ne(OrderSwapBatteryPre::getUcode,"hp_station_push") - .eq(OrderSwapBatteryPre::getStatus, 1) - .select(OrderSwapBatteryPre::getUcode,OrderSwapBatteryPre::getPkId,OrderSwapBatteryPre::getPlateNum) - ); - } - - @Override - public Boolean clearOrderSwapBatteryPre(List ids) { - - return orderSwapBatteryPreDao.update(new UpdateWrapper() - .in("pk_id", ids) - .set("status", 3) //直接取消 - ) > 0; - } - -} +// return new Result().error("添加预约换电订单出错!"); +// } +// +// @Override +// public Result cancelPre(Integer id, Integer status) { +// OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); +// osbp.setPkId(id); +// osbp.setStatus(status != null? status : 3); +// osbp.setUptime(null); +// int n = orderSwapBatteryPreDao.updateById(osbp); +// if (n == 1) { +// return new Result().success(n); +// } +// return new Result().error("取消预约换电订单失败!"); +// } +// +// @Override +// public Result> listPre(PageListSwapOrderPreRequest plsopr) throws ParseException { +// Page page = new Page(plsopr.getPageNo(), plsopr.getPageSize()); +// page = orderSwapBatteryPreDao.selectPage(page, new LambdaQueryWrapper() +// .eq(StringUtils.hasText(plsopr.getUcode()), OrderSwapBatteryPre::getUcode, plsopr.getUcode()) +// .eq(plsopr.getStatus() != null, OrderSwapBatteryPre::getStatus, plsopr.getStatus()) +// .eq(StringUtils.hasText(plsopr.getPlateNum()), OrderSwapBatteryPre::getPlateNum, plsopr.getPlateNum()) +// .eq(StringUtils.hasText(plsopr.getStationCode()), OrderSwapBatteryPre::getStationCode, plsopr.getStationCode()) +//// .apply(StringUtils.hasText(plsopr.getSwapDayBegin()), "DATE_FORMAT(swap_day,'%Y-%m-%d') >={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayBegin(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) +//// .apply(StringUtils.hasText(plsopr.getSwapDayEnd()), "DATE_FORMAT(swap_day,'%Y-%m-%d') <={0}", DateFormatUtils.format(DateUtils.parseDate(plsopr.getSwapDayEnd(),"yyyyMMdd","yyyy-MM-dd"), "yyyy-MM-dd")) +// .ge(StringUtils.hasText(plsopr.getSwapDayBegin()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayBegin()) +// .le(StringUtils.hasText(plsopr.getSwapDayEnd()), OrderSwapBatteryPre::getSwapDay, plsopr.getSwapDayEnd()) +// .orderByDesc(OrderSwapBatteryPre::getPkId)); +// if (page.getRecords().isEmpty()) { +// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +// } +// return new Result>().success(page); +// } +// +// @Override +// public Result add(OrderSwapBattery osb) { +// +// // 加上费用标准 +// osb = orderBasicFeeComponent.orderBasicFee(osb); +// osb.setCtime(new Date()); +// int n = orderSwapBatteryDao.insert(osb); +// if (n == 1) { +// return new Result().success(n); +// } +// return new Result().error("添加换电订单出错!"); +// } +// +// @Override +// public Result delete(Integer id) { +// OrderSwapBattery osb = new OrderSwapBattery(); +// osb.setPkId(id); +// osb.setDelFlag(1); +// int n = orderSwapBatteryDao.updateById(osb); +// if (n == 1) { +// return new Result().success(n); +// } +// throw new RuntimeException("删除换电订单出错!"); +// } +// +// @Override +// public Result update(OrderSwapBattery osb) { +// osb.setUptime(null); +// int n = orderSwapBatteryDao.updateById(osb); +// if (n == 1) { +// return new Result().success(n); +// } +// return new Result().error("更新换电订单失败!"); +// } +// +// @Override +// public Result> list(PageListSwapOrderRequest plsor) { +// Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); +// List plateNumList = new ArrayList(); +// if (StringUtils.hasText(plsor.getCcode())) { +// List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); +// if (vehicleList.isEmpty()) { +// return new Result>().error("未发现该公司车辆"); +// } +// plateNumList = vehicleList.stream().map(VehicleInfo::getPlateNum).toList(); +// } else if (StringUtils.hasText(plsor.getPlateNums())) { +// plateNumList = Arrays.asList(plsor.getPlateNums().split(",")); +// } +// List statusList = new ArrayList(); +// if (StringUtils.hasText(plsor.getStatus())) { +// statusList = Arrays.asList(plsor.getStatus().split(",")).stream().map(Integer::valueOf).toList(); +// } +// +// page = orderSwapBatteryDao.selectPage(page, new LambdaQueryWrapper() +// .eq(StringUtils.hasText(plsor.getOrderNo()), OrderSwapBattery::getOrderNo, plsor.getOrderNo()) +// .eq(StringUtils.hasText(plsor.getPlateNum()), OrderSwapBattery::getPlateNum, plsor.getPlateNum()) +// .in(!plateNumList.isEmpty(), OrderSwapBattery::getPlateNum, plateNumList) +// .in(!statusList.isEmpty(), OrderSwapBattery::getStatus, statusList) +// .ge(plsor.getOrderTimeBegin() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeBegin()) +// .le(plsor.getOrderTimeEnd() != null, OrderSwapBattery::getOrderTime, plsor.getOrderTimeEnd()) +// .eq(StringUtils.hasText(plsor.getStationCode()), OrderSwapBattery::getStationCode, plsor.getStationCode()) +// .like(StringUtils.hasText(plsor.getStationName()), OrderSwapBattery::getStationName, plsor.getStationName()) +// .eq(StringUtils.hasText(plsor.getUserId()), OrderSwapBattery::getOrderPreUid, plsor.getUserId()) +// .eq(StringUtils.hasText(plsor.getTradeNo()), OrderSwapBattery::getTradeNo, plsor.getTradeNo()) +// .ne(OrderSwapBattery::getDelFlag, 1) +// .orderByDesc(OrderSwapBattery::getPkId)); +// if (page.getRecords().isEmpty()) { +// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +// } +// page.getRecords().forEach(osb -> { +// if (StringUtils.hasText(osb.getFeeStandardJson())){ +// String feeStandardJson = osb.getFeeStandardJson(); +// BatteryStationHdFeeStandard bean = JSONUtil.toBean(feeStandardJson, BatteryStationHdFeeStandard.class); +// osb.setFeeStandardDetail(bean); +// } +// +// }); +// +// return new Result>().success(page); +// } +// +// @Override +// public Result> listByCompany(PageListSwapOrderRequest plsor) { +// if (!StringUtils.hasText(plsor.getCcode())) { +// return new Result>().error("参数错误"); +// } +// if (plsor.getOrderTimeBegin() == null || plsor.getOrderTimeEnd() == null) { +// return new Result>().error("参数错误"); +// } +// Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); +// List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", plsor.getCcode())); +// if (vehicleList.isEmpty()) { +// return new Result>().error("未发现该公司车辆"); +// } +// List plateNumList = vehicleList.stream().map(i -> i.getPlateNum()).toList(); +// page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() +// .in("plate_num", plateNumList) +// .in(StringUtils.hasText(plsor.getStatus()), "status", plsor.getStatus()) +// .ge("order_time", plsor.getOrderTimeBegin()) +// .le("order_time", plsor.getOrderTimeEnd()) +// .ne("del_flag", 1) +// .orderByDesc("pk_id")); +// if (page.getRecords().isEmpty()) { +// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +// } +// return new Result>().success(page); +// } +// +// @Override +// public Result> listStep(String orderNo) { +// List list = orderSwapBatteryStepDao.selectList(new QueryWrapper() +// .eq("order_no", orderNo)); +// if (list.isEmpty()) { +// return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); +// } +// return new Result>().success(list); +// } +// +// @Override +// public Result calculateCost1(String orderNo, OrderStatusData statusData) { +// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); +// log.info("订单号:{}", JSONUtil.parseObj(order)); +// if (order == null) { +// return new Result().error("无此订单!"); +// } +// // 1. 检查状态 +// if (order.getStatus() != 3) { +// return new Result().error("订单状态异常!"); +// } +// +// // 2. 检查数据 +// if (order.getBasicFee() == null || order.getServiceFee() == null) { +// order = orderBasicFeeComponent.orderBasicFee(order); +// if (order.getBasicFee() == null || order.getServiceFee() == null) { +// return new Result().error("订单费用标准异常!"); +// } +// } +// BigDecimal fee; +// // 3. 选择费用计算方式 计算费用 +// if (order.getFeeType()==3){ +// // 电量计算 +// if (order.getElectAmount() == null) { +// return new Result().error("充电订单充电量异常!"); +// } +// fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); +// +// }else if (order.getFeeType() == 2) { +// // TODO 按SOC +// if (statusData.getRentBatSoc() == null || statusData.getReturnBatSoc() == null) { +// return new Result().error("充电订单 SOC 异常!"); +// } +// // 计算 SOC +// BigDecimal socDifference = new BigDecimal(statusData.getRentBatSoc() - statusData.getReturnBatSoc()); +// fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); +// order.setElectAmount(socDifference); +// }else { +// return new Result().error("此订单不是按照电量计算"); +// } +// // 4. 修改订单 +// +// order.setAmount(fee.intValue()); +// order.setStatus(6); +// orderSwapBatteryDao.updateById(order); +// log.info("订单费用计算完成:{}", JSONUtil.parseObj(order)); +// gzhTemplateMessageService.orderMessageSend2(order.getPkId(),2); +// return new Result().success(fee); +// } +// +// +// +// @Override +// public Result calculateCost(OrderSwapBattery order) { +// // 2. 检查数据 +// if (order.getBasicFee() == null || order.getServiceFee() == null) { +// order = orderBasicFeeComponent.orderBasicFee(order); +// if (order.getBasicFee() == null || order.getServiceFee() == null) { +// return new Result().error("订单费用标准异常!"); +// } +// } +// // 3. 选择费用计算方式 计算费用 +// BigDecimal fee = BigDecimal.ZERO; +// if (order.getFeeType() == 3) { +// // 先按电量计算 +// if (order.getElectAmount() == null) { +// return new Result().error("充电订单 充电量 异常!"); +// } +// //基础费用*充电总量 +// fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); +// } else if (order.getFeeType() == 2) { +// // TODO 按SOC +// if (order.getReturnBatSoc() == null || order.getRentBatSoc() == null) { +// return new Result().error("充电订单 SOC 异常!"); +// } +// // 计算 SOC +// BigDecimal socDifference = new BigDecimal(order.getRentBatSoc() - order.getReturnBatSoc()); +// fee = order.getServiceFee().add(order.getBasicFee().multiply(socDifference)).setScale(0, RoundingMode.HALF_UP); +// +// } else if (order.getFeeType() == 1) { +// // TODO 按里程 +// +// } else { +// +// } +// // 4. 修改订单 +// order.setAmount(fee.intValue()); +// order.setStatus(6); +// order.setUptime(null); +// orderSwapBatteryDao.updateById(order); +// return new Result().success(fee); +// } +// +// +// @Override +// @Transactional +// public Result walletPay(String orderNo, String wuid, String uname) { +// // 订单 +// OrderSwapBattery order = orderSwapBatteryDao +// .selectOne(new QueryWrapper().eq("order_no", orderNo)); +// if (order.getStatus() != OrderStatusEnums.TOPAY.getCode()) { +// return new Result().error("订单异常!"); +// } +// if (order.getAmount() < 1) { +// return new Result().error("订单金额异常!"); +// } +// // 账户 +// WalletAccount wallet = walletAccountDao.selectOne(new QueryWrapper() +// .eq("owner_id", wuid)); +// if (wallet == null) { +// return new Result().error("钱包账户异常!"); +// } +// if (wallet.getTotalAmount() < order.getAmount()) { +// return new Result().error("钱包余额不足!"); +// } +// +// +// // 添加交易 +// TradeDetail trade = new TradeDetail(); +// trade.setOutTradeNo(CommonUtil.payTradeNo(2)); +// trade.setTrader(uname); +// trade.setTraderCode(wuid); +// trade.setTradeType(TradeTypeEnums.PAYORDER.getCode()); +// trade.setOrderCount(1); +// trade.setOrderNo(orderNo); +// trade.setTradeAmount(order.getAmount()); +// trade.setPayType(PayTypeEnums.WALLET.getCode()); +// trade.setPayResult("SUCCESS"); +// trade.setPayMsg("OK"); +// trade.setPayer(wuid); +// trade.setWallet(wallet.getCode()); +// trade.setPayTime(new Date()); +// tradeService.add(trade); +// +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// wad.setPreTotalAmount(wallet.getTotalAmount()); +// wad.setPreRechargeAmount(wallet.getRechargeAmount()); +// wad.setPreGiftAmount(0); +// // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 +// wad.setTradeRechargeAmount(-order.getAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setCode(wallet.getCode()); +// wad.setTradeType(trade.getTradeType()); +// wad.setTradeNo(trade.getOutTradeNo()); +// +// wad.setAfterTotalAmount(wad.getPreTotalAmount() - Math.abs(wad.getTradeTotalAmount())); +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() - Math.abs(wad.getTradeRechargeAmount())); +// wallet.setGiftAmount(wad.getPreGiftAmount() - Math.abs(wad.getTradeGiftAmount())); +// +// wad.setOrderNo(orderNo); +// wad.setPlateNum(order.getPlateNum()); +// wad.setStationName(order.getStationName());//添加订单关联关系及车牌号,站点信息0419 +// walletAccountService.addDetail(wad); +// // 改余额 +// wallet.setTotalAmount(wad.getAfterTotalAmount()); +// wallet.setRechargeAmount(wad.getAfterRechargeAmount()); +// wallet.setUptime(null); +// walletAccountDao.updateById(wallet); +// +// // 修改订单状态 +// order.setStatus(OrderStatusEnums.FINISH.getCode()); +// order.setTradeNo(trade.getOutTradeNo()); +// order.setUptime(null); +// orderSwapBatteryDao.updateById(order); +// +// //税点信息记录 +// try { +// taxPointService.addTaxPoint(order.getPkId(), order.getOrderNo(), Double.valueOf(order.getAmount()), order.getStationCode()); +// } catch (Exception e) { +// log.error("余额支付=====生成税点信息异常,订单信息{}; 异常信息{}", JSON.toJSONString(order), e.getMessage()); +// } +// +// return new Result().success("OK"); +// } +// +// @Override +// public Result companyNativePay(NativePayVO prePay) { +// return wechatService.wechatNativePay(prePay); +// } +// +// @Override +// public Result orderQuery(String outTradeNo) { +// return wechatService.orderQuery(2, outTradeNo); +// } +// +// @Override +// public Result cancelOrder(String orderNo, Integer status) { +// //根据订单编码查询此订单 +// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); +// // 1. 查看订单是否存在 +// OrderSwapBattery cancelOr = new OrderSwapBattery(); +// if (order == null) { +// return new Result().error("订单不存在"); +// } +// // 2. 校验当前状态是否允许取消 +// if (!Arrays.asList(3,4,5,6,7).contains(order.getStatus())) { +// return new Result().error("当前状态不允许取消,订单状态:" + order.getStatus()); +// } +// cancelOr.setPkId(order.getPkId()); +// cancelOr.setStatus(9); +// cancelOr.setUptime(new Date()); +// // 3.更新订单状态 +// int i = orderSwapBatteryDao.updateById(cancelOr); +// if (i==1){ +// return new Result().success(i); +// }else{ +// return new Result().error("取消换电订单失败"); +// } +// +// } +// +// @Override +// public Result markOrderAsExpired(Integer pkId) { +// OrderSwapBatteryPre orderSwapBatteryPre = orderSwapBatteryPreDao.selectById(pkId); +// orderSwapBatteryPre.setStatus(3); +// int re = orderSwapBatteryPreDao.updateById(orderSwapBatteryPre); +// if (re==1){ +// return new Result().success(re); +// } +// else{ +// return new Result().error("换电预约订单失败"); +// } +// } +// +// @Override +// public Result startSwap(String wuid, String orderId) { +// if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { +// log.warn("换电请求参数无效, wuid: {}, orderId: {}", wuid, orderId); +// return new Result().error("换电请求参数无效"); +// } +// +// // 获取用户订单 +// OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); +// if (orderSwap == null) { +// log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); +// return new Result().error("未找到符合条件的订单"); +// } +// +// try { +// log.info("开始处理换电请求, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid); +// +// // 构建换电请求消息 +// BatterySwapReq batterySwapReq = new BatterySwapReq(); +// batterySwapReq.setOrderNo(orderSwap.getOrderNo()); +// batterySwapReq.setMsg("换电开始"); +// +// // 设置消息主题和头部信息 +// MessageTopic topic = new MessageTopic(); +// topic.setDataDirection("M2S"); +// topic.setMessageType(MqttMessageTypeEnum.REQUEST.getType()); +// +// MqttMessageHeader header = new MqttMessageHeader(); +// header.setFunction(RequestFunctionTypesEnum.FUN_STARTSWAP.getFunction()); +// header.setTimeStamp(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_FORMATTER)); +// +// // 发送消息给站端 +// messageUtilService.publishAESMessage(topic, header, +// JSONUtil.parseObj(batterySwapReq, new JSONConfig().setDateFormat(DatePattern.NORM_DATETIME_PATTERN))); +// +// log.info("换电开始消息发送成功, 订单编号: {}", orderSwap.getOrderNo()); +// return new Result().success(true); +// +// } catch (Exception e) { +// log.error("处理换电请求时发生异常, 订单编号: {}, 用户ID: {}", orderSwap.getOrderNo(), wuid, e); +// return new Result().error("系统处理换电请求时发生异常"); +// } +// } +// +// @Override +// public Result getStartSwap(String wuid, String orderId) { +// // 参数校验 +// if (StrUtil.isBlank(wuid) || StrUtil.isBlank(orderId)) { +// log.warn("获取换电状态参数无效, wuid: {}, orderId: {}", wuid, orderId); +// return new Result().error("参数无效"); +// } +// +// // 获取用户订单 +// OrderSwapBattery orderSwap = orderSwapBatteryDao.selectById(orderId); +// if (orderSwap == null) { +// log.warn("未找到符合条件的订单, 用户ID: {}, 订单id: {}", wuid, orderId); +// return new Result().error("未找到符合条件的订单"); +// } +// +// try { +// // 从 Redis 中获取换电信息 +// String redisKey = "battery:" + orderSwap.getOrderNo(); +// Object o = redisUtil.get(redisKey); +// if (ObjectUtil.isEmpty(o)) { +// log.info("未收到换电成功信息, 订单编号: {}", orderSwap.getOrderNo()); +// return new Result().error("未收到换电成功信息"); +// } +// +// // 将获取到的 JSON 字符串转换为 BatterySwapResponse 对象 +// BatterySwapResponse response = JSONUtil.toBean(o.toString(), BatterySwapResponse.class); +// if (response == null) { +// log.error("换电响应数据解析失败, 订单编号: {}", orderSwap.getOrderNo()); +// return new Result().error("换电响应数据解析失败"); +// } +// +// if (response.getCode() == 1) { +// log.info("换电成功, 订单编号: {}", orderSwap.getOrderNo()); +// return new Result().success(response); +// } else { +// log.warn("换电失败, 订单编号: {}, 错误信息: {}", orderSwap.getOrderNo(), response.getMsg()); +// return new Result().error(response.getMsg()); +// } +// } catch (Exception e) { +// log.error("获取换电状态时发生异常, 订单编号: {}", orderSwap.getOrderNo(), e); +// return new Result().error("系统获取换电状态时发生异常"); +// } +// } +// +// +// @Override +// public Result checkList(PageListSwapOrderRequest plsor) { +// +// Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); +// List statusList = new ArrayList(); +// String strs= "1,2,3,4,5,6"; +// if (StringUtils.hasText(strs)) {//订单状态"已完成"之前的状态 +// statusList = Arrays.asList(strs.split(",")).stream().map(Integer::valueOf).toList(); +// } +// +// page = orderSwapBatteryDao.selectPage(page, new QueryWrapper() +// .eq(StringUtils.hasText(plsor.getOrderNo()), "order_no", plsor.getOrderNo()) +// .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) +// .in(!statusList.isEmpty(), "status", statusList) +// .ge(plsor.getOrderTimeBegin() != null, "order_time", plsor.getOrderTimeBegin()) +// .le(plsor.getOrderTimeEnd() != null, "order_time", plsor.getOrderTimeEnd()) +// .eq(StringUtils.hasText(plsor.getStationCode()), "station_code", plsor.getStationCode()) +// .like(StringUtils.hasText(plsor.getStationName()), "station_name", plsor.getStationName()) +// .eq(StringUtils.hasText(plsor.getUserId()), "order_pre_uid", plsor.getUserId()) +// .eq(StringUtils.hasText(plsor.getTradeNo()), "trade_no", plsor.getTradeNo()) +// .ne("del_flag", 1) +// .orderByDesc("pk_id")); +// if (!page.getRecords().isEmpty()) { +// return new Result().error("该车辆有未结算的订单,请确认后重试!"); +// } +// +// +// /*Page page1 = new Page(plsor.getPageNo(), plsor.getPageSize()); +// page1 = orderSwapBatteryPreDao.selectPage(page1, new QueryWrapper() +// .eq(StringUtils.hasText("1"), "status", "1") +// .eq(StringUtils.hasText(plsor.getPlateNum()), "plate_num", plsor.getPlateNum()) +// .orderByDesc("pk_id")); +// if (!page1.getRecords().isEmpty()) { +// return new Result().error("该车辆有预约成功的订单,请处理后重试!"); +// }*/ +// +// +// return new Result().success(0); +// } +// +// +// @Override +// public Boolean addPreByPlateNum(String PlateNum, String stationCode) { +// BatteryStation batteryStation = batteryStationDao.selectOne(new LambdaQueryWrapper().eq(BatteryStation::getCode, stationCode).select(BatteryStation::getCode, BatteryStation::getName), false); +// // 3. 添加预约 +// Date day = new Date(); +// OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); +// osbp.setSource(3); +// osbp.setSourceId(batteryStation.getCode()); +// osbp.setUcode("hp_station_push"); +// osbp.setUname("慧鹏站端推送"); +// osbp.setPhone("12332112345"); +// osbp.setPlateNum(PlateNum); +// osbp.setStationCode(batteryStation.getCode()); +// osbp.setStationName(batteryStation.getName()); +// osbp.setSwapDay(DateUtil.format(day, DatePattern.PURE_DATE_FORMATTER)); +// osbp.setSwapDuration("6:00-20:00"); +// osbp.setStatus(1); +// osbp.setCtime(osbp.getReservationTime()); +// osbp.setCreater("TEST"); +// osbp.setReservationTime(osbp.getReservationTime() == null ? day : osbp.getReservationTime()); +// osbp.setCtime(day); +// int n = orderSwapBatteryPreDao.insert(osbp); +// //特殊渠道反推的数据, 不需要发送通知 +//// if (n == 1) { +//// // 计算过期时间(预约时间后30分钟) +//// Date expireTime = DateUtil.offsetMinute(osbp.getReservationTime(), 90); +//// // 将预约单ID和过期时间存入Redis,设置过期时间为预约时间后30分钟 +//// String redisKey = "preorder:expire:" + osbp.getPkId(); +//// redisUtil.set(redisKey, expireTime); +//// // 发送服务号消息,没有消息队列,先用接口吧 +//// templateMessageService.preOrderMessageSend(osbp); +//// return true; +//// } +// return true; +// +// +// +// } +// +// @Override +// public List findOrderSwapBatteryPreList(String stationCode) { +// return orderSwapBatteryPreDao.selectList(new LambdaQueryWrapper() +// .eq(OrderSwapBatteryPre::getStationCode, stationCode) +//// .ne(OrderSwapBatteryPre::getUcode,"hp_station_push") +// .eq(OrderSwapBatteryPre::getStatus, 1) +// .select(OrderSwapBatteryPre::getUcode,OrderSwapBatteryPre::getPkId,OrderSwapBatteryPre::getPlateNum) +// ); +// } +// +// @Override +// public Boolean clearOrderSwapBatteryPre(List ids) { +// +// return orderSwapBatteryPreDao.update(new UpdateWrapper() +// .in("pk_id", ids) +// .set("status", 3) //直接取消 +// ) > 0; +// } +// +//} diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java index b4673b5..b7b7acc 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/task/OrderCostCalculateTask.java @@ -1,12 +1,11 @@ package com.evotech.hd.cloud.task; import cn.hutool.core.date.DateUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.evotech.hd.cloud.entity.order.Order; +import com.evotech.hd.cloud.service.OrderService; import com.evotech.hd.cloud.service.newthread.GZHTemplateMessageService; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +import com.evotech.hd.common.core.Dto.Result; import com.evotech.hd.common.core.enums.CodeMsg; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -22,9 +21,7 @@ import java.util.List; public class OrderCostCalculateTask { @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - @Resource - private OrderSwapBatteryService orderSwapBatteryService; + private OrderService orderService; @Resource private GZHTemplateMessageService gzhTemplateMessageService; @@ -37,9 +34,9 @@ public class OrderCostCalculateTask { Boolean flag = true; int n = 0; while (flag) { - List list = orderSwapBatteryDao.selectList(new QueryWrapper() - .eq("status", 5).ne("del_flag", 1) - .ge("order_time", DateUtil.beginOfYear(new Date())) + List list = orderService.list(new LambdaQueryWrapper() + .eq(Order::getStatus, 5).ne(Order::getDelFlag, 1) + .ge(Order::getOrderTime, DateUtil.beginOfYear(new Date())) .last("limit 20")); if (!list.isEmpty()) { n = orderCalculate(n, list); @@ -48,16 +45,14 @@ public class OrderCostCalculateTask { flag = false; } } - log.info("\r\n===>>>订单计算费用完成:{} 条数据", n); } - - private int orderCalculate(int n, List list) { + private int orderCalculate(int n, List list) { for (int i = 0; i < list.size(); i++) { - Result res = orderSwapBatteryService.calculateCost(list.get(i)); + Result res = orderService.calculateCost(list.get(i)); if ( CodeMsg.SUCCESS.getCode().equals(res.getCode())) { n += 1; // 发送微信消息 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java index b648c11..a8353ab 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/utils/components/SwapOrderBasicFeeComponent.java @@ -3,18 +3,31 @@ package com.evotech.hd.cloud.utils.components; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; import com.evotech.hd.cloud.dao.BatteryStationHdFeeStandardDao; +import com.evotech.hd.cloud.dao.OrderDetailDao; +import com.evotech.hd.cloud.entity.MessageMqtt; +import com.evotech.hd.cloud.entity.order.Order; +import com.evotech.hd.cloud.entity.order.OrderDetail; +import com.evotech.hd.cloud.entity.vo.MqttMessageParam; +import com.evotech.hd.cloud.mqtt.enums.EventFunctionTypesEnum; +import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +import com.evotech.hd.cloud.service.MessageMqttService; +import com.evotech.hd.common.core.constant.HDConstant; +import com.evotech.hd.common.core.entity.IdEntity; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandardDetail; -import com.evotech.hd.common.core.entity.cloud.OrderSwapBattery; +import com.evotech.hd.common.core.utils.Collections; +import com.evotech.hd.common.core.utils.CommonUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.time.LocalTime; -import java.util.ArrayList; import java.util.List; +import java.util.Map; @Slf4j @Component @@ -22,6 +35,11 @@ public class SwapOrderBasicFeeComponent { @Resource private BatteryStationHdFeeStandardDao batteryStationHdFeeStandardDao; + @Resource + private OrderDetailDao orderDetailDao; + @Resource + private MessageMqttService messageMqttService; + /** * 计算订单的基本费用和服务费用 @@ -30,26 +48,26 @@ public class SwapOrderBasicFeeComponent { * @param osb 订单对象,包含站点代码和订单时间 * @return 更新后的订单对象,包含计算后的基本费用和服务费用 */ - public OrderSwapBattery orderBasicFee(OrderSwapBattery osb) { + public OrderDetail orderBasicFee(Order order, OrderDetail orderDetail) { // 根据换电站编码和订单时间查询费用标准列表 - List list = batteryStationHdFeeStandardDao.listFeeStandard(osb.getStationCode(), DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); + List list = batteryStationHdFeeStandardDao.listFeeStandard(order.getStationCode(), DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); if(CollectionUtils.isEmpty(list)){ - list = batteryStationHdFeeStandardDao.orderCreateBeforeFeeEndStandard(osb.getStationCode(), DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); + list = batteryStationHdFeeStandardDao.orderCreateBeforeFeeEndStandard(order.getStationCode(), DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); } if(CollectionUtils.isEmpty(list)){ - list = batteryStationHdFeeStandardDao.orderCreateAfterFeeBeginStandard(osb.getStationCode(), DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); + list = batteryStationHdFeeStandardDao.orderCreateAfterFeeBeginStandard(order.getStationCode(), DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER)); } - - log.info("换电站编码{}时间{}订单费用计算参数========>:{}, 费用标准信息:{}", DateUtil.format(osb.getOrderTime(), DatePattern.PURE_DATE_FORMATTER),osb.getStationCode(),JSONUtil.toJsonStr(osb),JSONUtil.toJsonStr(list)); + log.info("换电站编码{}时间{}订单费用计算参数========>:{}, 费用标准信息:{}", DateUtil.format(order.getOrderTime(), DatePattern.PURE_DATE_FORMATTER),order.getStationCode(),JSONUtil.toJsonStr(order),JSONUtil.toJsonStr(list)); // 如果费用标准列表不为空,说明找到了相关的费用标准 if (!list.isEmpty()) { // 获取第一个费用标准 BatteryStationHdFeeStandard standard = list.get(0); + Integer serviceFee = CommonUtil.yuanToFen(standard.getServiceFee()).intValue(); + Integer unitPrice = getUnitFee(orderDetail.getFeeType(), standard); + String feeStandard = JSONUtil.toJsonStr(standard); // 获取该标准下的详细费用列表 List detailList = standard.getDetailList(); - List battery = new ArrayList<>(); - battery.add(standard); // 如果详细费用列表不为空,进行时间范围过滤 if (!detailList.isEmpty()) { // 过滤出当前时间在有效时间范围内的费用详情 @@ -58,28 +76,124 @@ public class SwapOrderBasicFeeComponent { // 如果过滤后的详细费用列表不为空,使用第一个有效的费用详情 if (!detailList.isEmpty()) { BatteryStationHdFeeStandardDetail detail = detailList.get(0); - log.info("当前时间在费用详情有效时间范围内=====>:{}", JSONUtil.toJsonStr(detail)); - // 设置基本费用和服务费用 - osb.setFeeStandardJson(JSONUtil.toJsonStr(detail)); - osb.setBasicFee(detail.getEachSocFee()); - osb.setServiceFee(detail.getTimeServiceFee()); - } else { - // 如果没有有效的详细费用,使用标准费用 - osb.setFeeStandardJson(JSONUtil.toJsonStr(standard)); - osb.setBasicFee(standard.getEachSocFee()); - osb.setServiceFee(standard.getCommonRemainFee()); + serviceFee = CommonUtil.yuanToFen(detail.getServiceFee()).intValue(); + unitPrice = getUnitFee(orderDetail.getFeeType(), detail); + feeStandard = JSONUtil.toJsonStr(detail); + } + } + try { + orderDetail.setServiceFee(serviceFee); + orderDetail.setUnitPrice(unitPrice); + orderDetail.setFeeStandard(feeStandard); + //直接更新数据 + orderDetailDao.updateById(orderDetail); + } catch (Exception e) { + log.error("更新费用信息出现错误"+e.getMessage()); + } + } + log.info("订单费用计算结果========>:{}", JSONUtil.toJsonStr(orderDetail)); + return orderDetail; + } + + + public OrderDetail calculateElectricityQuantity(Order order, OrderDetail orderDetail) { + Double electricityQuantity = 200d; + switch (orderDetail.getFeeType()){ + case HDConstant.OrderConstant.FEE_TYPE_ODO: + break; + case HDConstant.OrderConstant.FEE_TYPE_SOC: + //如果租借/归还soc不存在参数, 则需要到mqtt消息中去抓取消息进行反向解析 + if(orderDetail.getRentBatSOC() == null || orderDetail.getRentBatSOC() == null){ + Map valMap = getMqttValue(MqttMessageTypeEnum.EVENT, EventFunctionTypesEnum.FUN_ORDEREVENT.getFunction(), order, "rentBatSoc", "returnBatSoc"); + if(orderDetail.getRentBatSOC() == null && valMap.containsKey("rentBatSoc") && ObjectUtils.isNotEmpty(valMap.get("rentBatSoc"))){ + orderDetail.setRentBatSOC(Double.valueOf(String.valueOf(valMap.get("rentBatSoc")))); + } + if(orderDetail.getRentBatSOC() == null && valMap.containsKey("returnBatSoc") && ObjectUtils.isNotEmpty(valMap.get("returnBatSoc"))){ + orderDetail.setReturnBatSOC(Double.valueOf(String.valueOf(valMap.get("returnBatSoc")))); + } + } + electricityQuantity = orderDetail.getRentBatSOC() - orderDetail.getReturnBatSOC(); + break; + case HDConstant.OrderConstant.FEE_TYPE_DL: + //如果按照电量结算不存在参数, 则需要到mqtt消息中去抓取消息进行反向解析 + if(orderDetail.getElectEnd() == null || orderDetail.getElectStart() == null){ + Map valMap = getMqttValue(MqttMessageTypeEnum.EVENT, "chargingEvent", order, "electStart", "electEnd"); + if(orderDetail.getRentBatSOC() == null && valMap.containsKey("electStart") && ObjectUtils.isNotEmpty(valMap.get("electStart"))){ + orderDetail.setElectStart(Double.valueOf(String.valueOf(valMap.get("electStart")))); + } + if(orderDetail.getRentBatSOC() == null && valMap.containsKey("electEnd") && ObjectUtils.isNotEmpty(valMap.get("electEnd"))){ + orderDetail.setElectEnd(Double.valueOf(String.valueOf(valMap.get("electEnd")))); + } + } + electricityQuantity = orderDetail.getElectEnd() - orderDetail.getElectStart(); + default: + break; + } + try { + orderDetail.setElectricityQuantity(electricityQuantity); + //直接更新数据 + orderDetailDao.updateById(orderDetail); + } catch (Exception e) { + log.error("更新消费统计信息出现错误"+e.getMessage()); + } + return orderDetail; + } + + public Integer getUnitFee(Integer feeType, T c) { + switch (feeType){ + case HDConstant.OrderConstant.FEE_TYPE_ODO: + if(c instanceof BatteryStationHdFeeStandard){ + //元转分 + return CommonUtil.yuanToFen(((BatteryStationHdFeeStandard)c).getEachKmFee()).intValue(); + } + if(c instanceof BatteryStationHdFeeStandardDetail){ + //元转分 + return CommonUtil.yuanToFen(((BatteryStationHdFeeStandardDetail)c).getEachKmFee()).intValue(); + } + case HDConstant.OrderConstant.FEE_TYPE_SOC: + if(c instanceof BatteryStationHdFeeStandard){ + //元转分 + return CommonUtil.yuanToFen(((BatteryStationHdFeeStandard)c).getEachSocFee()).intValue(); + } + if(c instanceof BatteryStationHdFeeStandardDetail){ + //元转分 + return CommonUtil.yuanToFen(((BatteryStationHdFeeStandardDetail)c).getEachSocFee()).intValue(); + } + case HDConstant.OrderConstant.FEE_TYPE_DL: + if(c instanceof BatteryStationHdFeeStandard){ + //元转分 + return CommonUtil.yuanToFen(((BatteryStationHdFeeStandard)c).getEachKwhFee()).intValue(); + } + if(c instanceof BatteryStationHdFeeStandardDetail){ + //元转分 + return CommonUtil.yuanToFen(((BatteryStationHdFeeStandardDetail)c).getEachKwhFee()).intValue(); + } + default: + //默认返回每次2元 + return 200; + } + } + + + private Map getMqttValue(MqttMessageTypeEnum typeEnum, String messageFunction, Order order,String... orgs){ + Map valMap = Collections.emptyMap(); + MessageMqtt mqtt = messageMqttService.getOne(new MqttMessageParam(order.getOrderNo(), order.getStationCode(), "S2M", typeEnum.getType(), messageFunction, order.getOrderTime())); + if(mqtt != null){ + if(org.apache.commons.lang3.StringUtils.isNotEmpty(mqtt.getContent())){ + JSONObject content = JSONObject.parseObject(mqtt.getContent()); + JSONObject dataBody = content.getJSONObject("dataBody"); + if(dataBody != null){ + JSONObject statusData = dataBody.getJSONObject("statusData"); + if(statusData != null){ + for (int i = 0; i < orgs.length; i++) { + String key = orgs[i]; + valMap.put(key, statusData.get(key)); + } + } } - } else { - osb.setFeeStandardJson(JSONUtil.toJsonStr(standard)); - // 如果没有详细费用,直接使用标准费用 - log.info("没有详细费用,直接使用标准费用=====>:{}", JSONUtil.toJsonStr(standard)); - osb.setBasicFee(standard.getEachSocFee()); - osb.setServiceFee(standard.getCommonRemainFee()); } } - // 返回更新后的订单对象 - log.info("订单费用计算结果========>:{}", JSONUtil.toJsonStr(osb)); - return osb; + return valMap; } } diff --git a/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml new file mode 100644 index 0000000..eadb799 --- /dev/null +++ b/cloud-manage-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml b/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml index bbbeb7f..6c584b8 100644 --- a/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/OrderSwapBatteryMapper.xml @@ -3,26 +3,26 @@ - + - + - + - + @@ -30,7 +30,7 @@ - + diff --git a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java index 3e65671..4012a00 100644 --- a/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java +++ b/cloud-manage-server/src/test/java/com/evotech/hd/cloud/AddTestData.java @@ -1,152 +1,144 @@ -package com.evotech.hd.cloud; - -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.crypto.Mode; -import cn.hutool.crypto.Padding; -import cn.hutool.crypto.symmetric.AES; -import cn.hutool.crypto.symmetric.SymmetricCrypto; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.evotech.hd.cloud.controller.test.service.MqttConfigService; -import com.evotech.hd.cloud.controller.test.service.MqttTestUtil; -import com.evotech.hd.cloud.dao.*; -import com.evotech.hd.cloud.entity.BatteryStationSecretKey; -import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; -import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; -import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; -import com.evotech.hd.cloud.mqtt.message.MyMqttMessage; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; -import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep; -import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; -import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; -import com.evotech.hd.cloud.service.BatteryStationDcService; -import com.evotech.hd.cloud.service.OrderSwapBatteryService; -import com.evotech.hd.cloud.service.WalletAccountService; -import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; -import com.evotech.hd.common.core.constant.HDConstant; -import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; -import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; -import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; -import com.evotech.hd.common.core.dao.resource.CarTypeDao; -import com.evotech.hd.common.core.dao.wechat.WechatUserDao; -import com.evotech.hd.common.core.entity.Result; -import com.evotech.hd.common.core.entity.cloud.*; -import com.evotech.hd.common.core.entity.resource.BatteryType; -import com.evotech.hd.common.core.entity.resource.CarType; -import com.evotech.hd.common.core.entity.wechat.WechatUser; -import com.evotech.hd.common.core.enums.CodeMsg; -import com.evotech.hd.common.core.enums.OrderStatusEnums; -import com.evotech.hd.common.core.enums.TradeTypeEnums; -import com.evotech.hd.common.core.utils.CommonUtil; -import com.evotech.hd.common.redis.utils.RedisUtil; -import jakarta.annotation.Resource; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.Collectors; - -@SpringBootTest(classes = CloudManageServerApplication.class) -public class AddTestData { - - @Resource - private BatteryStationDao batteryStationDao; - @Resource - private BatteryTypeDao batteryTypeDao; - @Resource - private BatteryStationDcService batteryStationDcService; - @Resource - private CompanyDao companyDao; - @Resource - private CarTypeDao carTypeDao; - @Resource - private VehicleInfoDao vehicleInfoDao; - @Resource - private WechatUserDao wechatUserDao; - @Resource - private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; - @Resource - private OrderSwapBatteryPreDao orderSwapBatteryPreDao; - @Resource - private OrderSwapBatteryService orderSwapBatteryService; - @Resource - private SwapOrderBasicFeeComponent orderBasicFeeComponent; - @Resource - private OrderSwapBatteryDao orderSwapBatteryDao; - @Resource - private MqttTestUtil mqttTestUtil; - @Resource - private MqttConfigService mqttService; - @Resource - private RedisUtil redisUtil; - @Resource - private BatteryStationSecretKeyDao batteryStationSecretKeyDao; - @Resource - private MessageUtilService messageUtilService; - @Resource - private BatteryStationDcDao batteryStationDcDao; - @Resource - private WalletAccountService walletAccountService; - @Resource - private WalletAccountDao walletAccountDao; - @Resource - private WalletAccountDetailDao walletAccountDetailDao; - @Resource - private TradeDetailDao tradeDetailDao; - @Resource - private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao; - - - - - - private MqttClient testClient; - - - @Resource - private BatteryStationCdStrategyService batteryStationCdStrategyService; - -// @Test - void strategyFind(){ - System.out.println(batteryStationCdStrategyService.chargeStationFindList("123456")); - } - - - -// @Test - void testStrategyAndMqttM2S() throws MqttException { - testClient = mqttService.connect(); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new LambdaUpdateWrapper().eq(BatteryStation::getPkId, 4)); - BatteryStation station = stationList.get(0); - sendStrategyInfo(station.getCode()); - testClient.disconnect(); - - - } - - private void sendStrategyInfo(String stationCode) { - JSONObject jo = JSONUtil.parseObj("{stationCode:"+stationCode+"}"); - String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.REQUEST.getType()); - MqttMessageHeader header = mqttTestUtil.getHeader(RequestFunctionTypesEnum.FUN_STRATEGY_INFO.getFunction()); - publishMessage(stationCode, jo, topic, header); - - } - +//package com.evotech.hd.cloud; +// +//import cn.hutool.core.date.DatePattern; +//import cn.hutool.core.date.DateUtil; +//import cn.hutool.core.util.ObjectUtil; +//import cn.hutool.core.util.RandomUtil; +//import cn.hutool.crypto.Mode; +//import cn.hutool.crypto.Padding; +//import cn.hutool.crypto.symmetric.AES; +//import cn.hutool.crypto.symmetric.SymmetricCrypto; +//import cn.hutool.json.JSONObject; +//import cn.hutool.json.JSONUtil; +//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +//import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +//import com.evotech.hd.cloud.controller.test.service.MqttConfigService; +//import com.evotech.hd.cloud.controller.test.service.MqttTestUtil; +//import com.evotech.hd.cloud.dao.*; +//import com.evotech.hd.cloud.entity.BatteryStationSecretKey; +//import com.evotech.hd.cloud.mqtt.enums.MqttMessageTypeEnum; +//import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum; +//import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum; +//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader; +//import com.evotech.hd.cloud.mqtt.message.MyMqttMessage; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatus; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.OrderStatusData; +//import com.evotech.hd.cloud.mqtt.message.dto.newer.state.SwapStep; +//import com.evotech.hd.cloud.mqtt.message.handle.MessageUtilService; +//import com.evotech.hd.cloud.service.BatteryStationCdStrategyService; +//import com.evotech.hd.cloud.service.BatteryStationDcService; +//import com.evotech.hd.cloud.service.OrderSwapBatteryService; +//import com.evotech.hd.cloud.service.WalletAccountService; +//import com.evotech.hd.cloud.utils.components.SwapOrderBasicFeeComponent; +//import com.evotech.hd.common.core.constant.HDConstant; +//import com.evotech.hd.common.core.dao.cloud.OrderSwapBatteryDao; +//import com.evotech.hd.common.core.dao.cloud.PreOrderRelationSwapOrderDao; +//import com.evotech.hd.common.core.dao.resource.BatteryTypeDao; +//import com.evotech.hd.common.core.dao.resource.CarTypeDao; +//import com.evotech.hd.common.core.dao.wechat.WechatUserDao; +//import com.evotech.hd.common.core.entity.Result; +//import com.evotech.hd.common.core.entity.cloud.*; +//import com.evotech.hd.common.core.entity.resource.BatteryType; +//import com.evotech.hd.common.core.entity.resource.CarType; +//import com.evotech.hd.common.core.entity.wechat.WechatUser; +//import com.evotech.hd.common.core.enums.CodeMsg; +//import com.evotech.hd.common.core.enums.OrderStatusEnums; +//import com.evotech.hd.common.core.enums.TradeTypeEnums; +//import com.evotech.hd.common.core.utils.CommonUtil; +//import com.evotech.hd.common.redis.utils.RedisUtil; +//import jakarta.annotation.Resource; +//import org.eclipse.paho.client.mqttv3.MqttClient; +//import org.eclipse.paho.client.mqttv3.MqttException; +//import org.junit.jupiter.api.Test; +//import org.springframework.boot.test.context.SpringBootTest; +// +//import java.math.BigDecimal; +//import java.util.ArrayList; +//import java.util.Date; +//import java.util.LinkedList; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@SpringBootTest(classes = CloudManageServerApplication.class) +//public class AddTestData { +// +// @Resource +// private BatteryStationDao batteryStationDao; +// @Resource +// private BatteryTypeDao batteryTypeDao; +// @Resource +// private BatteryStationDcService batteryStationDcService; +// @Resource +// private CompanyDao companyDao; +// @Resource +// private CarTypeDao carTypeDao; +// @Resource +// private VehicleInfoDao vehicleInfoDao; +// @Resource +// private WechatUserDao wechatUserDao; +// @Resource +// private VehicleWechatUserRelationDao vehicleWechatUserRelationDao; +// @Resource +// private OrderSwapBatteryPreDao orderSwapBatteryPreDao; +// @Resource +// private OrderSwapBatteryService orderSwapBatteryService; +// @Resource +// private SwapOrderBasicFeeComponent orderBasicFeeComponent; +// @Resource +// private OrderSwapBatteryDao orderSwapBatteryDao; +// @Resource +// private MqttTestUtil mqttTestUtil; +// @Resource +// private MqttConfigService mqttService; +// @Resource +// private RedisUtil redisUtil; +// @Resource +// private BatteryStationSecretKeyDao batteryStationSecretKeyDao; +// @Resource +// private MessageUtilService messageUtilService; +// @Resource +// private BatteryStationDcDao batteryStationDcDao; +// @Resource +// private WalletAccountService walletAccountService; +// @Resource +// private WalletAccountDao walletAccountDao; +// @Resource +// private WalletAccountDetailDao walletAccountDetailDao; +// @Resource +// private TradeDetailDao tradeDetailDao; +// @Resource +// private PreOrderRelationSwapOrderDao preOrderRelationSwapOrderDao; +// +// +// +// +// +// private MqttClient testClient; +// +// +// @Resource +// private BatteryStationCdStrategyService batteryStationCdStrategyService; +// +//// @Test +// void strategyFind(){ +// System.out.println(batteryStationCdStrategyService.chargeStationFindList("123456")); +// } +// +// +// +//// @Test +// void testStrategyAndMqttM2S() throws MqttException { +// testClient = mqttService.connect(); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new LambdaUpdateWrapper().eq(BatteryStation::getPkId, 4)); +// BatteryStation station = stationList.get(0); +// sendStrategyInfo(station.getCode()); +// testClient.disconnect(); +// +// +// } +// // private void sendStrategyInfo(String stationCode) { // JSONObject jo = JSONUtil.parseObj("{stationCode:"+stationCode+"}"); // String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.REQUEST.getType()); @@ -154,960 +146,968 @@ public class AddTestData { // publishMessage(stationCode, jo, topic, header); // // } - - -// @Test - void addDC() { - System.out.println("======>>开始......"); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper()); - // 2. 按站添加 - List btList = batteryTypeDao.selectList(new QueryWrapper()); - System.out.println("======222>>" + btList.size()); - for (int i = 0; i < stationList.size(); i++) { - BatteryStation station = stationList.get(i); - Date d = new Date(); - String f1 = DateUtil.format(d, DatePattern.PURE_DATE_PATTERN); - for (int j = 0; j < 60; j++) { - BatteryStationDc dc = new BatteryStationDc(); - int random = RandomUtil.randomInt(0, btList.size()); - BatteryType bt = btList.get(random); - dc.setBatCode("YTDC" + bt.getTypeCode() + f1 + RandomUtil.randomStringUpper(14)); - dc.setCreater("TEST"); - dc.setProductionDate(DateUtil.format(DateUtil.offsetDay(d, -RandomUtil.randomInt(1, 100)), DatePattern.PURE_DATE_PATTERN)); - dc.setRegistrationDate(f1); - dc.setSoc(150); - dc.setStatus(3); - dc.setSourceCode(station.getCode()); - dc.setSourceFrom(1); - dc.setPointType(1); - dc.setPointCode(station.getCode()); - dc.setPointName(station.getName()); - dc.setTypeCode(bt.getTypeCode()); - dc.setTypeName(bt.getTypeName()); - - batteryStationDcService.add(dc); - } - - - } - - } - -// @Test - void addCars1() { - System.out.println("======>>开始c......"); - // 查询公司 - List companyList = companyDao.selectList(new QueryWrapper()); - // 车辆类型 - List carTypeList = carTypeDao.selectList(new QueryWrapper()); - // 电池类型 - List btList = batteryTypeDao.selectList(new QueryWrapper()); - // 添加车辆 - String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; - for (int i = 0; i < companyList.size(); i++) { - Company company = companyList.get(i); - Date d = new Date(); - Date d1 = DateUtil.offsetYear(d, -3); - for (int j = 1; j <= 40; j++) { - VehicleInfo vi = new VehicleInfo(); - int random = RandomUtil.randomInt(0, carTypeList.size()); - CarType ct = carTypeList.get(random); - vi.setTypeCode(ct.getTypeCode()); - vi.setVinNo(RandomUtil.randomStringUpper(16)); - vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); - vi.setOwnerType(2); - vi.setCcode(company.getCcode()); - vi.setCname(company.getCname()); - vi.setOwnerId(vi.getCcode()); - vi.setOwnerName(vi.getCname()); - vi.setPlateNum(carNo(company, j)); - vi.setEngineNo(RandomUtil.randomStringUpper(20)); - vi.setSeatsCount(RandomUtil.randomInt(2, 6)); - vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); - vi.setCarArea(company.getAddressCity()); - vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); - vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); - vi.setBoardDate(vi.getPurchaseDate()); - vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); - vi.setDelFlag(0); - vehicleInfoDao.insert(vi); - // 添加对应车辆的电池 - BatteryStationDc dc = new BatteryStationDc(); - int randomBtType = RandomUtil.randomInt(0, btList.size()); - BatteryType bt = btList.get(randomBtType); - dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); - dc.setCreater("TEST"); - dc.setProductionDate(vi.getProductionDate()); - dc.setRegistrationDate(vi.getRegistrationDate()); - dc.setSoc(150); - dc.setStatus(1); - dc.setSourceCode(vi.getPlateNum()); - dc.setSourceFrom(2); - dc.setTypeCode(bt.getTypeCode()); - dc.setTypeName(bt.getTypeName()); - - batteryStationDcService.add(dc); - } - - } - - - } - - private String carNo(Company c, Integer i) { - String divisionNo = c.getDivisionNo(); - String prefix = "冀"; - if ("130100".equals(divisionNo)) { - prefix += "AD1"; - } - if ("130200".equals(divisionNo)) { - prefix += "BD2"; - } - if ("130300".equals(divisionNo)) { - prefix += "CD3"; - } - if ("130400".equals(divisionNo)) { - prefix += "DD4"; - } - if ("130500".equals(divisionNo)) { - prefix += "ED5"; - } - if ("130600".equals(divisionNo)) { - prefix += "FD6"; - } - - String suffix = String.format("%04d", i); - return prefix + suffix; - } - -// @Test - void companyRelation() { - // 查询公司 - List companyList = companyDao.selectList(new QueryWrapper()); - - for (int i = 0; i < companyList.size(); i++) { - Company company = companyList.get(i); +// +//// private void sendStrategyInfo(String stationCode) { +//// JSONObject jo = JSONUtil.parseObj("{stationCode:"+stationCode+"}"); +//// String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.REQUEST.getType()); +//// MqttMessageHeader header = mqttTestUtil.getHeader(RequestFunctionTypesEnum.FUN_STRATEGY_INFO.getFunction()); +//// publishMessage(stationCode, jo, topic, header); +//// +//// } +// +// +//// @Test +// void addDC() { +// System.out.println("======>>开始......"); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper()); +// // 2. 按站添加 +// List btList = batteryTypeDao.selectList(new QueryWrapper()); +// System.out.println("======222>>" + btList.size()); +// for (int i = 0; i < stationList.size(); i++) { +// BatteryStation station = stationList.get(i); // Date d = new Date(); - List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", company.getCcode())); - for (int j = 0; j < vehicleList.size(); j++) { - VehicleInfo vi = vehicleList.get(j); - // 人车关联 -// int randomInt = RandomUtil.randomInt(4000 - (i+1)*(j+1)); - Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); - int randomInt = RandomUtil.randomInt(1, count.intValue()); - WechatUser user = wechatUserDao.selectOne(new QueryWrapper().isNull("pcode").last("limit " + randomInt + ", 1")); - VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); - relation.setUcode(user.getWuid()); - relation.setUname(user.getName()); - relation.setOpenid(user.getOpenid()); - relation.setPlateNum(vi.getPlateNum()); - relation.setPhone(user.getPhoneNumber()); - relation.setOwnerType(1); - relation.setCreater("TEST"); - relation.setCtime(new Date()); - vehicleWechatUserRelationDao.insert(relation); - // 公司绑人 - user.setPcode(company.getCcode()); - user.setPname(company.getCname()); - user.setType(2); - user.setUptime(null); - wechatUserDao.updateById(user); - } - - } - } - - +// String f1 = DateUtil.format(d, DatePattern.PURE_DATE_PATTERN); +// for (int j = 0; j < 60; j++) { +// BatteryStationDc dc = new BatteryStationDc(); +// int random = RandomUtil.randomInt(0, btList.size()); +// BatteryType bt = btList.get(random); +// dc.setBatCode("YTDC" + bt.getTypeCode() + f1 + RandomUtil.randomStringUpper(14)); +// dc.setCreater("TEST"); +// dc.setProductionDate(DateUtil.format(DateUtil.offsetDay(d, -RandomUtil.randomInt(1, 100)), DatePattern.PURE_DATE_PATTERN)); +// dc.setRegistrationDate(f1); +// dc.setSoc(150); +// dc.setStatus(3); +// dc.setSourceCode(station.getCode()); +// dc.setSourceFrom(1); +// dc.setPointType(1); +// dc.setPointCode(station.getCode()); +// dc.setPointName(station.getName()); +// dc.setTypeCode(bt.getTypeCode()); +// dc.setTypeName(bt.getTypeName()); +// +// batteryStationDcService.add(dc); +// } +// +// +// } +// +// } +// +//// @Test +// void addCars1() { +// System.out.println("======>>开始c......"); +// // 查询公司 +// List companyList = companyDao.selectList(new QueryWrapper()); +// // 车辆类型 +// List carTypeList = carTypeDao.selectList(new QueryWrapper()); +// // 电池类型 +// List btList = batteryTypeDao.selectList(new QueryWrapper()); +// // 添加车辆 +// String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; +// for (int i = 0; i < companyList.size(); i++) { +// Company company = companyList.get(i); +// Date d = new Date(); +// Date d1 = DateUtil.offsetYear(d, -3); +// for (int j = 1; j <= 40; j++) { +// VehicleInfo vi = new VehicleInfo(); +// int random = RandomUtil.randomInt(0, carTypeList.size()); +// CarType ct = carTypeList.get(random); +// vi.setTypeCode(ct.getTypeCode()); +// vi.setVinNo(RandomUtil.randomStringUpper(16)); +// vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); +// vi.setOwnerType(2); +// vi.setCcode(company.getCcode()); +// vi.setCname(company.getCname()); +// vi.setOwnerId(vi.getCcode()); +// vi.setOwnerName(vi.getCname()); +// vi.setPlateNum(carNo(company, j)); +// vi.setEngineNo(RandomUtil.randomStringUpper(20)); +// vi.setSeatsCount(RandomUtil.randomInt(2, 6)); +// vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); +// vi.setCarArea(company.getAddressCity()); +// vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); +// vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); +// vi.setBoardDate(vi.getPurchaseDate()); +// vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); +// vi.setDelFlag(0); +// vehicleInfoDao.insert(vi); +// // 添加对应车辆的电池 +// BatteryStationDc dc = new BatteryStationDc(); +// int randomBtType = RandomUtil.randomInt(0, btList.size()); +// BatteryType bt = btList.get(randomBtType); +// dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); +// dc.setCreater("TEST"); +// dc.setProductionDate(vi.getProductionDate()); +// dc.setRegistrationDate(vi.getRegistrationDate()); +// dc.setSoc(150); +// dc.setStatus(1); +// dc.setSourceCode(vi.getPlateNum()); +// dc.setSourceFrom(2); +// dc.setTypeCode(bt.getTypeCode()); +// dc.setTypeName(bt.getTypeName()); +// +// batteryStationDcService.add(dc); +// } +// +// } +// +// +// } +// +// private String carNo(Company c, Integer i) { +// String divisionNo = c.getDivisionNo(); +// String prefix = "冀"; +// if ("130100".equals(divisionNo)) { +// prefix += "AD1"; +// } +// if ("130200".equals(divisionNo)) { +// prefix += "BD2"; +// } +// if ("130300".equals(divisionNo)) { +// prefix += "CD3"; +// } +// if ("130400".equals(divisionNo)) { +// prefix += "DD4"; +// } +// if ("130500".equals(divisionNo)) { +// prefix += "ED5"; +// } +// if ("130600".equals(divisionNo)) { +// prefix += "FD6"; +// } +// +// String suffix = String.format("%04d", i); +// return prefix + suffix; +// } +// +//// @Test +// void companyRelation() { +// // 查询公司 +// List companyList = companyDao.selectList(new QueryWrapper()); +// +// for (int i = 0; i < companyList.size(); i++) { +// Company company = companyList.get(i); +//// Date d = new Date(); +// List vehicleList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", company.getCcode())); +// for (int j = 0; j < vehicleList.size(); j++) { +// VehicleInfo vi = vehicleList.get(j); +// // 人车关联 +//// int randomInt = RandomUtil.randomInt(4000 - (i+1)*(j+1)); +// Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); +// int randomInt = RandomUtil.randomInt(1, count.intValue()); +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper().isNull("pcode").last("limit " + randomInt + ", 1")); +// VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); +// relation.setUcode(user.getWuid()); +// relation.setUname(user.getName()); +// relation.setOpenid(user.getOpenid()); +// relation.setPlateNum(vi.getPlateNum()); +// relation.setPhone(user.getPhoneNumber()); +// relation.setOwnerType(1); +// relation.setCreater("TEST"); +// relation.setCtime(new Date()); +// vehicleWechatUserRelationDao.insert(relation); +// // 公司绑人 +// user.setPcode(company.getCcode()); +// user.setPname(company.getCname()); +// user.setType(2); +// user.setUptime(null); +// wechatUserDao.updateById(user); +// } +// +// } +// } +// +// +//// @Test +// void addCars2() { +// // 车辆类型 +// List carTypeList = carTypeDao.selectList(new QueryWrapper()); +// // 电池类型 +// List btList = batteryTypeDao.selectList(new QueryWrapper()); +// // 添加车辆 +// String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; +// Date d = new Date(); +// Date d1 = DateUtil.offsetYear(d, -3); +// for (int i = 1761; i < 3009; i++) { +// VehicleInfo vi = new VehicleInfo(); +// int random = RandomUtil.randomInt(0, carTypeList.size()); +// CarType ct = carTypeList.get(random); +// vi.setTypeCode(ct.getTypeCode()); +// vi.setVinNo(RandomUtil.randomStringUpper(16)); +// vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); +// vi.setOwnerType(1); +// List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper()); +// List ucodeList = relationList.stream().map(item -> item.getUcode()).distinct().toList(); +// Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); +// int randomInt = RandomUtil.randomInt(1, count.intValue() - ucodeList.size()); +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper() +// .isNull("pcode") +// .notIn("wuid", ucodeList) +// .last("limit " + randomInt + ", 1")); +// vi.setOwnerId(user.getWuid()); +// vi.setOwnerName(user.getName()); +// vi.setPhone(user.getPhoneNumber()); +// vi.setPlateNum("冀AD9" + String.format("%04d", i)); +// vi.setEngineNo(RandomUtil.randomStringUpper(20)); +// vi.setSeatsCount(RandomUtil.randomInt(2, 6)); +// vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); +// vi.setCarArea("石家庄市"); +// vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); +// vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); +// vi.setBoardDate(vi.getPurchaseDate()); +// vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); +// vi.setDelFlag(0); +// vi.setCreater("TEST"); +// vi.setCtime(new Date()); +// vehicleInfoDao.insert(vi); +// // 添加人车关联关系 +// VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); +// relation.setUcode(user.getWuid()); +// relation.setUname(user.getName()); +// relation.setOpenid(user.getOpenid()); +// relation.setPlateNum(vi.getPlateNum()); +// relation.setPhone(user.getPhoneNumber()); +// relation.setOwnerType(1); +// relation.setCreater("TEST"); +// relation.setCtime(new Date()); +// vehicleWechatUserRelationDao.insert(relation); +// +// // 添加对应车辆的电池 +// BatteryStationDc dc = new BatteryStationDc(); +// int randomBtType = RandomUtil.randomInt(0, btList.size()); +// BatteryType bt = btList.get(randomBtType); +// dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); +// dc.setCreater("TEST"); +// dc.setProductionDate(vi.getProductionDate()); +// dc.setRegistrationDate(vi.getRegistrationDate()); +// dc.setSoc(150); +// dc.setStatus(1); +// dc.setSourceCode(vi.getPlateNum()); +// dc.setSourceFrom(2); +// dc.setTypeCode(bt.getTypeCode()); +// dc.setTypeName(bt.getTypeName()); +// dc.setCtime(new Date()); +// +// batteryStationDcService.add(dc); +// } +// } +// +// +//// @Test +// void addPreOrders() { +// System.out.println("======>>开始......"); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper()); +// // 2. 按时间、站添加 +// Date d = new Date(); +// Date d1 = DateUtil.offsetYear(d, -4); +// long count = DateUtil.betweenDay(d1, d, true); +// int n = 1; +// for (int i = 0; i < count; i++) { +// Date day = DateUtil.offsetDay(d1, i); +// for (int j = 0; j < stationList.size(); j++) { +// BatteryStation station = stationList.get(j); +// for (int k = 0; k < 84; k++) { +// OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); +// osbp.setSource(2); +// osbp.setSourceId(station.getCode()); +// // 车 +// VehicleInfo vehicle = vehicleInfoDao.selectOne(new QueryWrapper().last("limit " + n + ", 1")); +// // 人 +// VehicleWechatUserRelation relation = vehicleWechatUserRelationDao.selectOne(new QueryWrapper() +// .eq("plate_num", vehicle.getPlateNum()).last("limit 1")); +// osbp.setUcode(relation.getUcode()); +// osbp.setUname(relation.getUname()); +// osbp.setPlateNum(vehicle.getPlateNum()); +// osbp.setPhone(relation.getPhone()); +// osbp.setStationCode(station.getCode()); +// osbp.setStationName(station.getName()); +// osbp.setReservationTime(new Date()); +// +// orderSwapBatteryPreDao.insert(osbp); +// n++; +// if (n == 3250) { +// n = 1; +// } +// } +// +// } +// +// } +// +// } +// +// +//// @Test +// void addOrders() { +// System.out.println("======>>开始......"); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); +// // 2. 按时间、站添加 +// Date d1 = new Date(); +// Date d2 = DateUtil.offsetYear(d1, -4); +// long count = DateUtil.betweenDay(d2, d1, true); +// for (int i = 0; i < count; i++) { +// Date day = DateUtil.offsetDay(DateUtil.offsetYear(new Date(), -4), i); +// String dayString = DateUtil.format(day, DatePattern.PURE_DATE_PATTERN); +// for (int j = 0; j < stationList.size(); j++) { +// BatteryStation station = stationList.get(j); +// // 查这天,这个站的预约 +// List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper() +// .eq("station_code", station.getCode()) +// .eq("swap_day", dayString) +// .eq("status", 1)); +// // 根据预约生成订单 +// if (orderPreList.isEmpty()) { +// continue; +// } +// Date orderTime = DateUtil.offsetMinute(DateUtil.offsetHour(DateUtil.beginOfDay(day), 6), RandomUtil.randomInt(1, 60)); +// for (int k = 0; k < orderPreList.size(); k++) { +// OrderSwapBatteryPre orderPre = orderPreList.get(k); +// OrderSwapBattery order = new OrderSwapBattery(); +// order.setOrderType(1); +// order.setCtime(new Date()); +// order.setCreater("TEST"); +// order.setOrderPreId(orderPre.getPkId()); +// order.setOrderPreUid(orderPre.getUcode()); +// order.setOrderPreUname(orderPre.getUname()); +// order.setOrderPrePhone(orderPre.getPhone()); +// order.setOrderNo(orderNo(station.getCode(), orderTime)); +// order.setPlateNum(orderPre.getPlateNum()); +// order.setOrderTime(orderTime); +// order.setStationCode(orderPre.getStationCode()); +// order.setStationName(orderPre.getStationName()); +// order.setStatus(1); +// order.setFeeType(3); +// order.setDelFlag(0); +// order.setRemark("测试用的"); +// order.setChangeMode(1); +// order.setChangeLane(1); +// +// // 加上费用标准 +// order = orderBasicFeeComponent.orderBasicFee(order); +// orderSwapBatteryDao.insert(order); +// +// orderTime = DateUtil.offsetMinute(orderTime, 10); +// } +// +// } +// +// } +// +// } +// +// +// private String orderNo(String stationCode, Date d) { +// String orderNoPrefix = "YTSO"; +// String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8); +// String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER); +// String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF"); +// return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix; +// } +// +//// @Test +// void orderHandle1() { +// // 挑 1000条订单,取消 +// for (int i = 0; i < 2000; i++) { +// int randomInt = RandomUtil.randomInt(100, 730000); +// OrderSwapBattery one = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("status", 1).last("limit " + randomInt + ", 1")); +// OrderSwapBattery order = new OrderSwapBattery(); +// order.setPkId(one.getPkId()); +// order.setStatus(OrderStatusEnums.CANCLE.getCode()); +// orderSwapBatteryDao.updateById(order); +// } +// +// +// } +// +//// @Test +// void orderHandle2() { +// testClient = mqttService.connect(); +// // 1. 查 站 +// List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); +// Date d1 = new Date(); +// Date d2 = DateUtil.offsetYear(DateUtil.offsetDay(d1, -2), -4); +// long count = DateUtil.betweenDay(d2, d1, true); +// for (int i = 0; i < count; i++) { +// Date day = DateUtil.offsetDay(d2, i); +// for (int j = 0; j < stationList.size(); j++) { +// BatteryStation station = stationList.get(j); +// // 查这天,这个站的订单 +// List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() +// .eq("station_code", station.getCode()) +// .eq("status", 1) +// .ge("order_time", DateUtil.beginOfDay(day)) +// .le("order_time", DateUtil.endOfDay(day))); +// if (orderList.isEmpty()) { +// continue; +// } +// // 这个站的电池 +// List selectList = batteryStationDcDao.selectList(new QueryWrapper() +// .eq("status", 3) +// .eq("point_code", station.getCode()) +// .eq("del_flag", 0)); +// LinkedList dcList = new LinkedList(selectList); +// for (int k = 0; k < orderList.size(); k++) { +// OrderSwapBattery order = orderList.get(k); +// // 反馈订单状态 +// // 状态2 +// OrderStatus orderStatus = new OrderStatus(); +// orderStatus.setOrderNo(order.getOrderNo()); +// orderStatus.setStatus(2); +// orderStatus.setStatusTime(DateUtil.offsetSecond(order.getOrderTime(), RandomUtil.randomInt(10, 15))); +// orderStatusHandle(orderStatus, null, order.getStationCode()); +// // 步骤2 - 车辆到达指定位置 +// SwapStep swapStep = new SwapStep(); +// swapStep.setOrderNo(order.getOrderNo()); +// swapStep.setStep(2); +// swapStep.setStepTime(DateUtil.offsetSecond(orderStatus.getStatusTime(), RandomUtil.randomInt(30, 35))); +// swapStep(swapStep, order.getStationCode()); +// // 步骤3 - 启动对中机构 +// swapStep.setStep(3); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); +// swapStep(swapStep, order.getStationCode()); +// // 步骤4 - 取新电池 +// swapStep.setStep(4); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); +// swapStep(swapStep, order.getStationCode()); +// // 步骤5 - 拆旧电池 +// swapStep.setStep(5); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(50, 65))); +// swapStep(swapStep, order.getStationCode()); +// // 步骤6 - 装新电池 +// swapStep.setStep(6); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(30, 40))); +// swapStep(swapStep, order.getStationCode()); +// // 步骤7 - 放旧电池 +// swapStep.setStep(7); +// swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(60, 70))); +// swapStep(swapStep, order.getStationCode()); +// // 状态3 - 换电完成 +// try { +// Thread.sleep(500L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// orderStatus.setStatus(3); +// orderStatus.setStatusTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(5, 10))); +// // 电池信息 +// // 原电池 +// VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", order.getPlateNum())); +// BatteryStationDc dc1 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); +// // 新电池 +// BatteryStationDc dc2 = dcList.removeFirst(); +// OrderStatusData statusData = new OrderStatusData(); +// statusData.setRentBatNo(dc2.getDccNo()); +// statusData.setRentBatCode(dc2.getBatCode()); +// statusData.setRentBatSoc(dc2.getSoc()); +// statusData.setReturnBatCode(dc1.getBatCode()); +// statusData.setReturnBatNo(dc2.getDccNo()); +// statusData.setReturnBatSoc(10); +// statusData.setReturnBatRentSoc(vi.getBatSoc()); +// orderStatusHandle(orderStatus, statusData, order.getStationCode()); +// // 状态4 - 开始充电 +// try { +// Thread.sleep(1000L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// orderStatus.setStatus(4); +// orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(4, 7))); +// orderStatusHandle(orderStatus, null, order.getStationCode()); +// // 状态5 - 充电完成 +// try { +// Thread.sleep(1000L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// orderStatus.setStatus(5); +// orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(90, 100))); +// OrderStatusData statusData5 = new OrderStatusData(); +// statusData5.setBatCode(dc1.getBatCode()); +// statusData5.setElectAmount(new BigDecimal(RandomUtil.randomInt(100, 140))); +// statusData5.setSoc(100); +// orderStatusHandle(orderStatus, statusData5, order.getStationCode()); +// +// +// try { +// Thread.sleep(500L); +// } catch (InterruptedException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// BatteryStationDc dc3 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); +// dcList.addLast(dc3); +// } +// +// } +// +// } +// +// +// } +// +// /** +// * 反馈订单状态 +// */ +// private void orderStatusHandle(OrderStatus orderStatus, OrderStatusData statusData, String stationCode) { +// orderStatus.setStatusData(statusData); +// JSONObject jo = JSONUtil.parseObj(orderStatus); +// String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); +// MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction()); +// +//// mqttTestUtil.publishMessage(stationCode, jo, topic, header); +// publishMessage(stationCode, jo, topic, header); +// +// } +// +// private void publishMessage(String stationCode, JSONObject jo, String topic, MqttMessageHeader header) { +// // 1. 获取AES +// JSONObject aesJo = getAESKey(stationCode); +// SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, aesJo.getStr("aesSecretKey").getBytes(), aesJo.getStr("aesIv").getBytes()); +// // 2. 数据 +// MyMqttMessage message = new MyMqttMessage(); +// message.setHeader(header); +// message.setDataBody(jo); +// String encrypt = aes.encryptBase64(JSONUtil.toJsonStr(message)); +// // 3. 发送MQTT消息 +// mqttService.publish(testClient, encrypt, topic); +// } +// +// /** +// * 获取AES秘钥和IV +// * @param stationCode +// * @return +// */ +// public JSONObject getAESKey(String stationCode) { +// JSONObject jo = new JSONObject(); +// Object o1 = null; +// try { +// o1 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key"); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// Object o2 = null; +// try { +// o2 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv"); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// if (!ObjectUtil.isEmpty(o1) && !ObjectUtil.isEmpty(o2)) { +// jo.set("aesSecretKey", o1.toString()); +// jo.set("aesIv", o2.toString()); +//// jo.set("encryptKey", o1.toString()); +//// jo.set("encryptVector", o2.toString()); +// return jo; +// } +// BatteryStationSecretKey bssk = batteryStationSecretKeyDao.selectOne(new QueryWrapper().eq("type", 2).eq("station_code", stationCode)); +// if (bssk == null) { +// throw new RuntimeException("AES秘钥未获取到,请站端重新登陆!"); +//// return setAesKey(stationCode); +// } +// redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key", bssk.getPublicKey()); +// redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv", bssk.getPrivateKey()); +// jo.set("aesSecretKey", o1.toString()); +// jo.set("aesIv", o2.toString()); +//// jo.set("encryptKey", o1.toString()); +//// jo.set("encryptVector", o2.toString()); +// return jo; +// } +// +// /** +// * 反馈换电步骤 +// */ +// private void swapStep(SwapStep swapStep, String stationCode) { +// JSONObject jo = JSONUtil.parseObj(swapStep); +// +// String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); +// MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_SWAPSTEP.getFunction()); +// +// publishMessage(stationCode, jo, topic, header); +// } +// +// +// /** +// * 添加钱包 +// */ +//// @Test +// void addWallet1() { +// System.out.println("======>>开始c......"); +// // 1. 公司账户钱包 +// // 查询公司 +// List companyList = companyDao.selectList(new QueryWrapper()); +// for (int i = 0; i < companyList.size(); i++) { +// Company c = companyList.get(i); +// WalletAccount wa = new WalletAccount(); +// wa.setOwnerType(2); +// wa.setOwnerId(c.getCcode()); +// wa.setStatus(1); +// walletAccountService.add(wa); +// // 假装充值 +// // 交易 +// wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(c.getCname()); +// td.setTraderCode(c.getCcode()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// td.setDescription("TEST-假装公司充值交易"); +// td.setOutTradeNo(CommonUtil.payTradeNo(1)); +// td.setTradeType(1); +// td.setTradeAmount(RandomUtil.randomInt(100000000, 950000000)); +// td.setPayType(4); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 +// wad.setTradeRechargeAmount(td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); +// +// wad.setTradeGiftAmount(0); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// } +// +// } +// +// +// /** +// * 添加钱包 +// */ +//// @Test +// void addWallet2() { +// System.out.println("======>>开始c......"); +// // 1. 个人账户钱包 +// // 查询人 +// Long count = wechatUserDao.selectCount(new QueryWrapper()); +// for (int i = 0; i < count; i++) { +// int offset = 1 + i; +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper().last("limit " + offset + ", 1")); +// boolean exists = walletAccountDao.exists(new QueryWrapper().eq("owner_id", user.getWuid())); +// if (exists) { +// continue; +// } +// WalletAccount wa = new WalletAccount(); +// wa.setOwnerType(1); +// wa.setOwnerId(user.getWuid()); +// wa.setStatus(1); +// walletAccountService.add(wa); +// // 假装充值 +// // 交易 +// wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", user.getWuid())); +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(user.getName()); +// td.setTraderCode(user.getWuid()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// td.setDescription("TEST-假装个人充值交易"); +// td.setOutTradeNo(CommonUtil.payTradeNo(1)); +// td.setTradeType(1); +// td.setTradeAmount(RandomUtil.randomInt(20000000, 150000000)); +// td.setPayType(4); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 +// wad.setTradeRechargeAmount(td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); +// +// wad.setTradeGiftAmount(0); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// } +// +// } +// +// // @Test - void addCars2() { - // 车辆类型 - List carTypeList = carTypeDao.selectList(new QueryWrapper()); - // 电池类型 - List btList = batteryTypeDao.selectList(new QueryWrapper()); - // 添加车辆 - String[] colorArr = {"赤", "橙", "黄", "绿", "青", "蓝", "紫"}; - Date d = new Date(); - Date d1 = DateUtil.offsetYear(d, -3); - for (int i = 1761; i < 3009; i++) { - VehicleInfo vi = new VehicleInfo(); - int random = RandomUtil.randomInt(0, carTypeList.size()); - CarType ct = carTypeList.get(random); - vi.setTypeCode(ct.getTypeCode()); - vi.setVinNo(RandomUtil.randomStringUpper(16)); - vi.setFrameworkNo(RandomUtil.randomStringUpper(18)); - vi.setOwnerType(1); - List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper()); - List ucodeList = relationList.stream().map(item -> item.getUcode()).distinct().toList(); - Long count = wechatUserDao.selectCount(new QueryWrapper().isNull("pcode")); - int randomInt = RandomUtil.randomInt(1, count.intValue() - ucodeList.size()); - WechatUser user = wechatUserDao.selectOne(new QueryWrapper() - .isNull("pcode") - .notIn("wuid", ucodeList) - .last("limit " + randomInt + ", 1")); - vi.setOwnerId(user.getWuid()); - vi.setOwnerName(user.getName()); - vi.setPhone(user.getPhoneNumber()); - vi.setPlateNum("冀AD9" + String.format("%04d", i)); - vi.setEngineNo(RandomUtil.randomStringUpper(20)); - vi.setSeatsCount(RandomUtil.randomInt(2, 6)); - vi.setCarColor(colorArr[RandomUtil.randomInt(0, colorArr.length)]); - vi.setCarArea("石家庄市"); - vi.setProductionDate(DateUtil.format(DateUtil.offsetDay(d1, -RandomUtil.randomInt(30, 120)), DatePattern.PURE_DATE_PATTERN)); - vi.setPurchaseDate(DateUtil.format(d1, DatePattern.PURE_DATE_PATTERN)); - vi.setBoardDate(vi.getPurchaseDate()); - vi.setRegistrationDate(DateUtil.format(DateUtil.offsetDay(d1, 1), DatePattern.PURE_DATE_PATTERN)); - vi.setDelFlag(0); - vi.setCreater("TEST"); - vi.setCtime(new Date()); - vehicleInfoDao.insert(vi); - // 添加人车关联关系 - VehicleWechatUserRelation relation = new VehicleWechatUserRelation(); - relation.setUcode(user.getWuid()); - relation.setUname(user.getName()); - relation.setOpenid(user.getOpenid()); - relation.setPlateNum(vi.getPlateNum()); - relation.setPhone(user.getPhoneNumber()); - relation.setOwnerType(1); - relation.setCreater("TEST"); - relation.setCtime(new Date()); - vehicleWechatUserRelationDao.insert(relation); - - // 添加对应车辆的电池 - BatteryStationDc dc = new BatteryStationDc(); - int randomBtType = RandomUtil.randomInt(0, btList.size()); - BatteryType bt = btList.get(randomBtType); - dc.setBatCode("YTDC" + bt.getTypeCode() + vi.getProductionDate() + RandomUtil.randomStringUpper(14)); - dc.setCreater("TEST"); - dc.setProductionDate(vi.getProductionDate()); - dc.setRegistrationDate(vi.getRegistrationDate()); - dc.setSoc(150); - dc.setStatus(1); - dc.setSourceCode(vi.getPlateNum()); - dc.setSourceFrom(2); - dc.setTypeCode(bt.getTypeCode()); - dc.setTypeName(bt.getTypeName()); - dc.setCtime(new Date()); - - batteryStationDcService.add(dc); - } - } - - -// @Test - void addPreOrders() { - System.out.println("======>>开始......"); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper()); - // 2. 按时间、站添加 - Date d = new Date(); - Date d1 = DateUtil.offsetYear(d, -4); - long count = DateUtil.betweenDay(d1, d, true); - int n = 1; - for (int i = 0; i < count; i++) { - Date day = DateUtil.offsetDay(d1, i); - for (int j = 0; j < stationList.size(); j++) { - BatteryStation station = stationList.get(j); - for (int k = 0; k < 84; k++) { - OrderSwapBatteryPre osbp = new OrderSwapBatteryPre(); - osbp.setSource(2); - osbp.setSourceId(station.getCode()); - // 车 - VehicleInfo vehicle = vehicleInfoDao.selectOne(new QueryWrapper().last("limit " + n + ", 1")); - // 人 - VehicleWechatUserRelation relation = vehicleWechatUserRelationDao.selectOne(new QueryWrapper() - .eq("plate_num", vehicle.getPlateNum()).last("limit 1")); - osbp.setUcode(relation.getUcode()); - osbp.setUname(relation.getUname()); - osbp.setPlateNum(vehicle.getPlateNum()); - osbp.setPhone(relation.getPhone()); - osbp.setStationCode(station.getCode()); - osbp.setStationName(station.getName()); - osbp.setReservationTime(new Date()); - - orderSwapBatteryPreDao.insert(osbp); - n++; - if (n == 3250) { - n = 1; - } - } - - } - - } - - } - - -// @Test - void addOrders() { - System.out.println("======>>开始......"); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); - // 2. 按时间、站添加 - Date d1 = new Date(); - Date d2 = DateUtil.offsetYear(d1, -4); - long count = DateUtil.betweenDay(d2, d1, true); - for (int i = 0; i < count; i++) { - Date day = DateUtil.offsetDay(DateUtil.offsetYear(new Date(), -4), i); - String dayString = DateUtil.format(day, DatePattern.PURE_DATE_PATTERN); - for (int j = 0; j < stationList.size(); j++) { - BatteryStation station = stationList.get(j); - // 查这天,这个站的预约 - List orderPreList = orderSwapBatteryPreDao.selectList(new QueryWrapper() - .eq("station_code", station.getCode()) - .eq("swap_day", dayString) - .eq("status", 1)); - // 根据预约生成订单 - if (orderPreList.isEmpty()) { - continue; - } - Date orderTime = DateUtil.offsetMinute(DateUtil.offsetHour(DateUtil.beginOfDay(day), 6), RandomUtil.randomInt(1, 60)); - for (int k = 0; k < orderPreList.size(); k++) { - OrderSwapBatteryPre orderPre = orderPreList.get(k); - OrderSwapBattery order = new OrderSwapBattery(); - order.setOrderType(1); - order.setCtime(new Date()); - order.setCreater("TEST"); - order.setOrderPreId(orderPre.getPkId()); - order.setOrderPreUid(orderPre.getUcode()); - order.setOrderPreUname(orderPre.getUname()); - order.setOrderPrePhone(orderPre.getPhone()); - order.setOrderNo(orderNo(station.getCode(), orderTime)); - order.setPlateNum(orderPre.getPlateNum()); - order.setOrderTime(orderTime); - order.setStationCode(orderPre.getStationCode()); - order.setStationName(orderPre.getStationName()); - order.setStatus(1); - order.setFeeType(3); - order.setDelFlag(0); - order.setRemark("测试用的"); - order.setChangeMode(1); - order.setChangeLane(1); - - // 加上费用标准 - order = orderBasicFeeComponent.orderBasicFee(order); - orderSwapBatteryDao.insert(order); - - orderTime = DateUtil.offsetMinute(orderTime, 10); - } - - } - - } - - } - - - private String orderNo(String stationCode, Date d) { - String orderNoPrefix = "YTSO"; - String orderNoMiddle1 = stationCode.length() <= 8?stationCode : stationCode.substring(stationCode.length() - 8); - String orderNoMiddle2 = DateUtil.format(d, DatePattern.PURE_DATETIME_MS_FORMATTER); - String orderNoSuffix = RandomUtil.randomNumbers(2) + RandomUtil.randomChar("ABCDEF"); - return orderNoPrefix + orderNoMiddle1 + orderNoMiddle2 + orderNoSuffix; - } - -// @Test - void orderHandle1() { - // 挑 1000条订单,取消 - for (int i = 0; i < 2000; i++) { - int randomInt = RandomUtil.randomInt(100, 730000); - OrderSwapBattery one = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("status", 1).last("limit " + randomInt + ", 1")); - OrderSwapBattery order = new OrderSwapBattery(); - order.setPkId(one.getPkId()); - order.setStatus(OrderStatusEnums.CANCLE.getCode()); - orderSwapBatteryDao.updateById(order); - } - - - } - -// @Test - void orderHandle2() { - testClient = mqttService.connect(); - // 1. 查 站 - List stationList = batteryStationDao.selectList(new QueryWrapper().eq("del_flag", 0)); - Date d1 = new Date(); - Date d2 = DateUtil.offsetYear(DateUtil.offsetDay(d1, -2), -4); - long count = DateUtil.betweenDay(d2, d1, true); - for (int i = 0; i < count; i++) { - Date day = DateUtil.offsetDay(d2, i); - for (int j = 0; j < stationList.size(); j++) { - BatteryStation station = stationList.get(j); - // 查这天,这个站的订单 - List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() - .eq("station_code", station.getCode()) - .eq("status", 1) - .ge("order_time", DateUtil.beginOfDay(day)) - .le("order_time", DateUtil.endOfDay(day))); - if (orderList.isEmpty()) { - continue; - } - // 这个站的电池 - List selectList = batteryStationDcDao.selectList(new QueryWrapper() - .eq("status", 3) - .eq("point_code", station.getCode()) - .eq("del_flag", 0)); - LinkedList dcList = new LinkedList(selectList); - for (int k = 0; k < orderList.size(); k++) { - OrderSwapBattery order = orderList.get(k); - // 反馈订单状态 - // 状态2 - OrderStatus orderStatus = new OrderStatus(); - orderStatus.setOrderNo(order.getOrderNo()); - orderStatus.setStatus(2); - orderStatus.setStatusTime(DateUtil.offsetSecond(order.getOrderTime(), RandomUtil.randomInt(10, 15))); - orderStatusHandle(orderStatus, null, order.getStationCode()); - // 步骤2 - 车辆到达指定位置 - SwapStep swapStep = new SwapStep(); - swapStep.setOrderNo(order.getOrderNo()); - swapStep.setStep(2); - swapStep.setStepTime(DateUtil.offsetSecond(orderStatus.getStatusTime(), RandomUtil.randomInt(30, 35))); - swapStep(swapStep, order.getStationCode()); - // 步骤3 - 启动对中机构 - swapStep.setStep(3); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); - swapStep(swapStep, order.getStationCode()); - // 步骤4 - 取新电池 - swapStep.setStep(4); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), 5)); - swapStep(swapStep, order.getStationCode()); - // 步骤5 - 拆旧电池 - swapStep.setStep(5); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(50, 65))); - swapStep(swapStep, order.getStationCode()); - // 步骤6 - 装新电池 - swapStep.setStep(6); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(30, 40))); - swapStep(swapStep, order.getStationCode()); - // 步骤7 - 放旧电池 - swapStep.setStep(7); - swapStep.setStepTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(60, 70))); - swapStep(swapStep, order.getStationCode()); - // 状态3 - 换电完成 - try { - Thread.sleep(500L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - orderStatus.setStatus(3); - orderStatus.setStatusTime(DateUtil.offsetSecond(swapStep.getStepTime(), RandomUtil.randomInt(5, 10))); - // 电池信息 - // 原电池 - VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", order.getPlateNum())); - BatteryStationDc dc1 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); - // 新电池 - BatteryStationDc dc2 = dcList.removeFirst(); - OrderStatusData statusData = new OrderStatusData(); - statusData.setRentBatNo(dc2.getDccNo()); - statusData.setRentBatCode(dc2.getBatCode()); - statusData.setRentBatSoc(dc2.getSoc()); - statusData.setReturnBatCode(dc1.getBatCode()); - statusData.setReturnBatNo(dc2.getDccNo()); - statusData.setReturnBatSoc(10); - statusData.setReturnBatRentSoc(vi.getBatSoc()); - orderStatusHandle(orderStatus, statusData, order.getStationCode()); - // 状态4 - 开始充电 - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - orderStatus.setStatus(4); - orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(4, 7))); - orderStatusHandle(orderStatus, null, order.getStationCode()); - // 状态5 - 充电完成 - try { - Thread.sleep(1000L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - orderStatus.setStatus(5); - orderStatus.setStatusTime(DateUtil.offsetMinute(orderStatus.getStatusTime(), RandomUtil.randomInt(90, 100))); - OrderStatusData statusData5 = new OrderStatusData(); - statusData5.setBatCode(dc1.getBatCode()); - statusData5.setElectAmount(new BigDecimal(RandomUtil.randomInt(100, 140))); - statusData5.setSoc(100); - orderStatusHandle(orderStatus, statusData5, order.getStationCode()); - - - try { - Thread.sleep(500L); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - BatteryStationDc dc3 = batteryStationDcDao.selectOne(new QueryWrapper().eq("del_flag", 0).eq("bat_code", vi.getBatCode())); - dcList.addLast(dc3); - } - - } - - } - - - } - - /** - * 反馈订单状态 - */ - private void orderStatusHandle(OrderStatus orderStatus, OrderStatusData statusData, String stationCode) { - orderStatus.setStatusData(statusData); - JSONObject jo = JSONUtil.parseObj(orderStatus); - String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); - MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction()); - -// mqttTestUtil.publishMessage(stationCode, jo, topic, header); - publishMessage(stationCode, jo, topic, header); - - } - - private void publishMessage(String stationCode, JSONObject jo, String topic, MqttMessageHeader header) { - // 1. 获取AES - JSONObject aesJo = getAESKey(stationCode); - SymmetricCrypto aes = new AES(Mode.CBC, Padding.PKCS5Padding, aesJo.getStr("aesSecretKey").getBytes(), aesJo.getStr("aesIv").getBytes()); - // 2. 数据 - MyMqttMessage message = new MyMqttMessage(); - message.setHeader(header); - message.setDataBody(jo); - String encrypt = aes.encryptBase64(JSONUtil.toJsonStr(message)); - // 3. 发送MQTT消息 - mqttService.publish(testClient, encrypt, topic); - } - - /** - * 获取AES秘钥和IV - * @param stationCode - * @return - */ - public JSONObject getAESKey(String stationCode) { - JSONObject jo = new JSONObject(); - Object o1 = null; - try { - o1 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key"); - } catch (Exception e) { - e.printStackTrace(); - } - Object o2 = null; - try { - o2 = redisUtil.get(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv"); - } catch (Exception e) { - e.printStackTrace(); - } - if (!ObjectUtil.isEmpty(o1) && !ObjectUtil.isEmpty(o2)) { - jo.set("aesSecretKey", o1.toString()); - jo.set("aesIv", o2.toString()); -// jo.set("encryptKey", o1.toString()); -// jo.set("encryptVector", o2.toString()); - return jo; - } - BatteryStationSecretKey bssk = batteryStationSecretKeyDao.selectOne(new QueryWrapper().eq("type", 2).eq("station_code", stationCode)); - if (bssk == null) { - throw new RuntimeException("AES秘钥未获取到,请站端重新登陆!"); -// return setAesKey(stationCode); - } - redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":key", bssk.getPublicKey()); - redisUtil.set(HDConstant.HD_STATION_SECRET_KEY_AES_PREFIX + stationCode + ":iv", bssk.getPrivateKey()); - jo.set("aesSecretKey", o1.toString()); - jo.set("aesIv", o2.toString()); -// jo.set("encryptKey", o1.toString()); -// jo.set("encryptVector", o2.toString()); - return jo; - } - - /** - * 反馈换电步骤 - */ - private void swapStep(SwapStep swapStep, String stationCode) { - JSONObject jo = JSONUtil.parseObj(swapStep); - - String topic = mqttTestUtil.getTopic(stationCode, MqttMessageTypeEnum.STATE.getType()); - MqttMessageHeader header = mqttTestUtil.getHeader(StateFunctionTypesEnum.FUN_SWAPSTEP.getFunction()); - - publishMessage(stationCode, jo, topic, header); - } - - - /** - * 添加钱包 - */ -// @Test - void addWallet1() { - System.out.println("======>>开始c......"); - // 1. 公司账户钱包 - // 查询公司 - List companyList = companyDao.selectList(new QueryWrapper()); - for (int i = 0; i < companyList.size(); i++) { - Company c = companyList.get(i); - WalletAccount wa = new WalletAccount(); - wa.setOwnerType(2); - wa.setOwnerId(c.getCcode()); - wa.setStatus(1); - walletAccountService.add(wa); - // 假装充值 - // 交易 - wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(c.getCname()); - td.setTraderCode(c.getCcode()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - td.setDescription("TEST-假装公司充值交易"); - td.setOutTradeNo(CommonUtil.payTradeNo(1)); - td.setTradeType(1); - td.setTradeAmount(RandomUtil.randomInt(100000000, 950000000)); - td.setPayType(4); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); - - wad.setTradeGiftAmount(0); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - } - - } - - - /** - * 添加钱包 - */ -// @Test - void addWallet2() { - System.out.println("======>>开始c......"); - // 1. 个人账户钱包 - // 查询人 - Long count = wechatUserDao.selectCount(new QueryWrapper()); - for (int i = 0; i < count; i++) { - int offset = 1 + i; - WechatUser user = wechatUserDao.selectOne(new QueryWrapper().last("limit " + offset + ", 1")); - boolean exists = walletAccountDao.exists(new QueryWrapper().eq("owner_id", user.getWuid())); - if (exists) { - continue; - } - WalletAccount wa = new WalletAccount(); - wa.setOwnerType(1); - wa.setOwnerId(user.getWuid()); - wa.setStatus(1); - walletAccountService.add(wa); - // 假装充值 - // 交易 - wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", user.getWuid())); - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(user.getName()); - td.setTraderCode(user.getWuid()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - td.setDescription("TEST-假装个人充值交易"); - td.setOutTradeNo(CommonUtil.payTradeNo(1)); - td.setTradeType(1); - td.setTradeAmount(RandomUtil.randomInt(20000000, 150000000)); - td.setPayType(4); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - // TODO 写一个算法,计算充值的减多少,赠送的减多少,总金额减多少 - wad.setTradeRechargeAmount(td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + Math.abs(wad.getTradeRechargeAmount())); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + Math.abs(wad.getTradeTotalAmount())); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + Math.abs(wad.getTradeGiftAmount())); - - wad.setTradeGiftAmount(0); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - } - - } - - - @Test - void calFee() { - // 计算订单费用 - System.out.println("\r\n===>>>开始查找订单计算费用"); - // 查询状态为5的订单 - Boolean flag = true; - int n = 0; - while (flag) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() - .eq("status", 5).ne("del_flag", 1) - .ge("order_time", "2024-10-01 00:00:00") - .le("order_time", "2025-01-01 00:00:00") - .last("limit 1")); - if (order == null) { - flag = false; - } else { - System.out.println("\r\n===>>>订单号:" + order.getOrderNo()); - Result res = orderSwapBatteryService.calculateCost(order); - if ( CodeMsg.SUCCESS.getCode().equals(res.getCode())) { - n += 1; - } - } - } - - System.out.println("\r\n===>>>订单计算费用完成:" + n + " 条数据"); - } - - - -// @Test - void payOrder() { - // 支付订单 - System.out.println("\r\n===>>>开始查找订单计算费用"); - Boolean flag = true; - while (flag) { - OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() - .eq("status", 6).ne("del_flag", 1) - .ge("order_time", "2024-01-01 00:00:00") - .le("order_time", "2024-07-01 00:00:00") - .last("limit 1")); - if (order == null) { - flag = false; - return; - } - if (order.getAmount() <= 0) { - return; - } - String plateNum = order.getPlateNum(); - VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", plateNum)); - if (vi.getOwnerType() == 1) { - System.out.println("---111---"); - // 1. 个人订单 - wallatPayOrder(order); - } else if (vi.getOwnerType() == 2) { - System.out.println("---222---"); - // 公司订单 - Company c = companyDao.selectOne(new QueryWrapper().eq("ccode", vi.getCcode())); - if (c == null) { - return; - } - wallatPayOrderCompany(order, c); - } - } - } - - private void wallatPayOrderCompany(OrderSwapBattery order, Company c) { - // 公司车辆 - List viList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", c.getCcode())); - List plateNumList = viList.stream().map(item -> item.getPlateNum()).toList(); - // 找该公司今天的订单 一块支付 - Date begin = DateUtil.beginOfDay(order.getOrderTime()); - Date end = DateUtil.offsetDay(begin, 1); - List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() - .eq("status", 6).ne("del_flag", 1) - .ge("order_time", begin) - .le("order_time", end) - .in("plate_num", plateNumList)); - - // 公司钱包 - WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); - if (wa == null) { - return; - } - // 假装余额支付 - // 交易 - Integer amount = orderList.stream().collect(Collectors.summingInt(OrderSwapBattery::getAmount)); - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(c.getCname()); - td.setTraderCode(c.getCcode()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - String ddd = DateUtil.format(begin, DatePattern.PURE_DATE_PATTERN); - td.setDescription("TEST-假装余额支付公司车辆 " + ddd + " 订单"); - td.setOutTradeNo(CommonUtil.payTradeNo(2)); - td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); - td.setTradeAmount(amount); - td.setPayType(1); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setTradeRechargeAmount(-td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); - - wad.setCreater("TEST"); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - - // 交易订单关系 - List list = new ArrayList(); - for (int i = 0; i < orderList.size(); i++) { - PreOrderRelationSwapOrder relationOrder = new PreOrderRelationSwapOrder(); - relationOrder.setPayApiType(null); - relationOrder.setOrderNo(orderList.get(i).getOrderNo()); - relationOrder.setCtime(d); - relationOrder.setDescription(td.getDescription()); - relationOrder.setOutTradeNo(td.getOutTradeNo()); - list.add(relationOrder); - } - preOrderRelationSwapOrderDao.insert(list); - - // 修改订单 - List idList = orderList.stream().map(i -> i.getPkId()).toList(); - orderSwapBatteryDao.update(new UpdateWrapper().in("pk_id", idList) - .set("status", OrderStatusEnums.FINISH.getCode()) - .set("trade_no", td.getOutTradeNo())); - } - - - - - private void wallatPayOrder(OrderSwapBattery order) { - // 付款人 - String wuid = order.getOrderPreUid(); - WechatUser user = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wuid)); - // 付款人钱包 - WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", wuid)); - if (wa == null) { - return; - } - // 假装余额支付 - // 交易 - Date d = new Date(); - TradeDetail td = new TradeDetail(); - td.setAppid("wx2ab384cf1e6f85a1"); - td.setTrader(user.getName()); - td.setTraderCode(user.getWuid()); - td.setWallet(wa.getCode()); - td.setMchid("1695885921"); - td.setDelFlag(0); - td.setDescription("TEST-假装余额支付订单"); - td.setOutTradeNo(CommonUtil.payTradeNo(2)); - td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); - td.setTradeAmount(order.getAmount()); - td.setPayType(1); - td.setPayResult("SUCCESS"); - td.setPayMsg("OK"); - td.setPayTime(d); - td.setOrderNo(order.getOrderNo()); - td.setCtime(d); - td.setCreater("TEST"); - tradeDetailDao.insert(td); - // 钱包 - // 添加明细 - WalletAccountDetail wad = new WalletAccountDetail(); - wad.setCode(wa.getCode()); - wad.setTradeType(td.getTradeType()); - wad.setTradeNo(td.getOutTradeNo()); - - wad.setPreTotalAmount(wa.getTotalAmount()); - wad.setPreRechargeAmount(wa.getRechargeAmount()); - wad.setPreGiftAmount(wa.getGiftAmount()); - - wad.setTradeRechargeAmount(-td.getTradeAmount()); - wad.setTradeGiftAmount(0); - wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); - - wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); - wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); - wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); - - wad.setCreater("TEST"); - wad.setCtime(new Date()); - walletAccountDetailDao.insert(wad); - // 改余额 - wa.setTotalAmount(wad.getAfterTotalAmount()); - wa.setRechargeAmount(wad.getAfterRechargeAmount()); - wa.setGiftAmount(wad.getAfterGiftAmount()); - wa.setUptime(null); - walletAccountDao.updateById(wa); - - // 修改订单 - afterPayAlterOrder(td, order); - } - - private void afterPayAlterOrder(TradeDetail tradeDetail, OrderSwapBattery one) { - OrderSwapBattery osb = new OrderSwapBattery(); - osb.setPkId(one.getPkId()); - osb.setStatus(OrderStatusEnums.FINISH.getCode()); - osb.setTradeNo(tradeDetail.getOutTradeNo()); - orderSwapBatteryDao.updateById(osb); - } - - -} +// void calFee() { +// // 计算订单费用 +// System.out.println("\r\n===>>>开始查找订单计算费用"); +// // 查询状态为5的订单 +// Boolean flag = true; +// int n = 0; +// while (flag) { +// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() +// .eq("status", 5).ne("del_flag", 1) +// .ge("order_time", "2024-10-01 00:00:00") +// .le("order_time", "2025-01-01 00:00:00") +// .last("limit 1")); +// if (order == null) { +// flag = false; +// } else { +// System.out.println("\r\n===>>>订单号:" + order.getOrderNo()); +// Result res = orderSwapBatteryService.calculateCost(order); +// if ( CodeMsg.SUCCESS.getCode().equals(res.getCode())) { +// n += 1; +// } +// } +// } +// +// System.out.println("\r\n===>>>订单计算费用完成:" + n + " 条数据"); +// } +// +// +// +//// @Test +// void payOrder() { +// // 支付订单 +// System.out.println("\r\n===>>>开始查找订单计算费用"); +// Boolean flag = true; +// while (flag) { +// OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper() +// .eq("status", 6).ne("del_flag", 1) +// .ge("order_time", "2024-01-01 00:00:00") +// .le("order_time", "2024-07-01 00:00:00") +// .last("limit 1")); +// if (order == null) { +// flag = false; +// return; +// } +// if (order.getAmount() <= 0) { +// return; +// } +// String plateNum = order.getPlateNum(); +// VehicleInfo vi = vehicleInfoDao.selectOne(new QueryWrapper().eq("plate_num", plateNum)); +// if (vi.getOwnerType() == 1) { +// System.out.println("---111---"); +// // 1. 个人订单 +// wallatPayOrder(order); +// } else if (vi.getOwnerType() == 2) { +// System.out.println("---222---"); +// // 公司订单 +// Company c = companyDao.selectOne(new QueryWrapper().eq("ccode", vi.getCcode())); +// if (c == null) { +// return; +// } +// wallatPayOrderCompany(order, c); +// } +// } +// } +// +// private void wallatPayOrderCompany(OrderSwapBattery order, Company c) { +// // 公司车辆 +// List viList = vehicleInfoDao.selectList(new QueryWrapper().eq("ccode", c.getCcode())); +// List plateNumList = viList.stream().map(item -> item.getPlateNum()).toList(); +// // 找该公司今天的订单 一块支付 +// Date begin = DateUtil.beginOfDay(order.getOrderTime()); +// Date end = DateUtil.offsetDay(begin, 1); +// List orderList = orderSwapBatteryDao.selectList(new QueryWrapper() +// .eq("status", 6).ne("del_flag", 1) +// .ge("order_time", begin) +// .le("order_time", end) +// .in("plate_num", plateNumList)); +// +// // 公司钱包 +// WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", c.getCcode())); +// if (wa == null) { +// return; +// } +// // 假装余额支付 +// // 交易 +// Integer amount = orderList.stream().collect(Collectors.summingInt(OrderSwapBattery::getAmount)); +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(c.getCname()); +// td.setTraderCode(c.getCcode()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// String ddd = DateUtil.format(begin, DatePattern.PURE_DATE_PATTERN); +// td.setDescription("TEST-假装余额支付公司车辆 " + ddd + " 订单"); +// td.setOutTradeNo(CommonUtil.payTradeNo(2)); +// td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); +// td.setTradeAmount(amount); +// td.setPayType(1); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setTradeRechargeAmount(-td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); +// +// wad.setCreater("TEST"); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// +// // 交易订单关系 +// List list = new ArrayList(); +// for (int i = 0; i < orderList.size(); i++) { +// PreOrderRelationSwapOrder relationOrder = new PreOrderRelationSwapOrder(); +// relationOrder.setPayApiType(null); +// relationOrder.setOrderNo(orderList.get(i).getOrderNo()); +// relationOrder.setCtime(d); +// relationOrder.setDescription(td.getDescription()); +// relationOrder.setOutTradeNo(td.getOutTradeNo()); +// list.add(relationOrder); +// } +// preOrderRelationSwapOrderDao.insert(list); +// +// // 修改订单 +// List idList = orderList.stream().map(i -> i.getPkId()).toList(); +// orderSwapBatteryDao.update(new UpdateWrapper().in("pk_id", idList) +// .set("status", OrderStatusEnums.FINISH.getCode()) +// .set("trade_no", td.getOutTradeNo())); +// } +// +// +// +// +// private void wallatPayOrder(OrderSwapBattery order) { +// // 付款人 +// String wuid = order.getOrderPreUid(); +// WechatUser user = wechatUserDao.selectOne(new QueryWrapper().eq("wuid", wuid)); +// // 付款人钱包 +// WalletAccount wa = walletAccountDao.selectOne(new QueryWrapper().eq("owner_id", wuid)); +// if (wa == null) { +// return; +// } +// // 假装余额支付 +// // 交易 +// Date d = new Date(); +// TradeDetail td = new TradeDetail(); +// td.setAppid("wx2ab384cf1e6f85a1"); +// td.setTrader(user.getName()); +// td.setTraderCode(user.getWuid()); +// td.setWallet(wa.getCode()); +// td.setMchid("1695885921"); +// td.setDelFlag(0); +// td.setDescription("TEST-假装余额支付订单"); +// td.setOutTradeNo(CommonUtil.payTradeNo(2)); +// td.setTradeType(TradeTypeEnums.PAYORDER.getCode()); +// td.setTradeAmount(order.getAmount()); +// td.setPayType(1); +// td.setPayResult("SUCCESS"); +// td.setPayMsg("OK"); +// td.setPayTime(d); +// td.setOrderNo(order.getOrderNo()); +// td.setCtime(d); +// td.setCreater("TEST"); +// tradeDetailDao.insert(td); +// // 钱包 +// // 添加明细 +// WalletAccountDetail wad = new WalletAccountDetail(); +// wad.setCode(wa.getCode()); +// wad.setTradeType(td.getTradeType()); +// wad.setTradeNo(td.getOutTradeNo()); +// +// wad.setPreTotalAmount(wa.getTotalAmount()); +// wad.setPreRechargeAmount(wa.getRechargeAmount()); +// wad.setPreGiftAmount(wa.getGiftAmount()); +// +// wad.setTradeRechargeAmount(-td.getTradeAmount()); +// wad.setTradeGiftAmount(0); +// wad.setTradeTotalAmount(wad.getTradeRechargeAmount() + wad.getTradeGiftAmount()); +// +// wad.setAfterRechargeAmount(wad.getPreRechargeAmount() + wad.getTradeRechargeAmount()); +// wad.setAfterTotalAmount(wad.getPreTotalAmount() + wad.getTradeTotalAmount()); +// wad.setAfterGiftAmount(wad.getPreGiftAmount() + wad.getTradeGiftAmount()); +// +// wad.setCreater("TEST"); +// wad.setCtime(new Date()); +// walletAccountDetailDao.insert(wad); +// // 改余额 +// wa.setTotalAmount(wad.getAfterTotalAmount()); +// wa.setRechargeAmount(wad.getAfterRechargeAmount()); +// wa.setGiftAmount(wad.getAfterGiftAmount()); +// wa.setUptime(null); +// walletAccountDao.updateById(wa); +// +// // 修改订单 +// afterPayAlterOrder(td, order); +// } +// +// private void afterPayAlterOrder(TradeDetail tradeDetail, OrderSwapBattery one) { +// OrderSwapBattery osb = new OrderSwapBattery(); +// osb.setPkId(one.getPkId()); +// osb.setStatus(OrderStatusEnums.FINISH.getCode()); +// osb.setTradeNo(tradeDetail.getOutTradeNo()); +// orderSwapBatteryDao.updateById(osb); +// } +// +// +//}