From f2921afcc8325c2907437dbce860ec3af4856d68 Mon Sep 17 00:00:00 2001 From: Administrator Date: Fri, 27 Dec 2024 17:38:33 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E8=B0=83=E6=95=B4=E5=85=AC=E5=8F=B8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=202.=20=E6=B7=BB=E5=8A=A0=E5=85=AC=E5=8F=B8?= =?UTF-8?q?=E5=91=98=E5=B7=A5=E7=BB=91=E5=AE=9A=E6=8E=A5=E5=8F=A3=203.=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=AC=E5=8F=B8=E8=BD=A6=E8=BE=86=E5=85=B3?= =?UTF-8?q?=E8=81=94=E6=8E=A5=E5=8F=A3=204.=20=E4=BF=AE=E5=A4=8Dmybatis?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E6=97=A0=E6=80=BB=E6=95=B0?= =?UTF-8?q?bug=205.=20=E5=AE=8C=E5=96=84=E6=8D=A2=E7=94=B5=E7=AB=99?= =?UTF-8?q?=E8=B4=B9=E7=94=A8=E6=A0=87=E5=87=86=206.=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E6=8D=A2=E7=94=B5=E4=BA=A4=E4=BA=92=E9=80=BB=E8=BE=91=207.=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9token=E8=BF=87=E6=9C=9F=E6=97=B6=E7=9A=84?= =?UTF-8?q?=E8=BF=94=E5=9B=9Ebug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LoginController.java | 4 +- .../authorization/service/LoginService.java | 2 +- .../service/impl/LoginServiceImpl.java | 5 +-- .../utils/Oauth2AccessTokenUtil.java | 2 +- .../core/entity/cloud/BatteryStationDc.java | 7 +-- .../cloud/BatteryStationHdFeeStandard.java | 9 ++++ .../core/entity/cloud/OrderSwapBattery.java | 4 +- .../cloud/PageListSwapOrderRequest.java | 3 ++ .../customer/VehicleController.java | 22 ++++++--- .../order/OrderSwapBatteryController.java | 8 ++++ .../dao/BatteryStationHdFeeStandardDao.java | 4 +- .../message/handle/RequestMessageService.java | 30 ++++++++++++- .../message/handle/StateMessageService.java | 1 + .../service/OrderSwapBatteryService.java | 2 + .../hd/cloud/service/VehicleService.java | 2 + .../impl/BatteryStationDcServiceImpl.java | 2 +- ...StationHdFeeStandardDetailServiceImpl.java | 8 ++++ ...atteryStationHdFeeStandardServiceImpl.java | 11 ++++- .../impl/OrderSwapBatteryServiceImpl.java | 45 ++++++++++++++++++- .../service/impl/VehicleServiceImpl.java | 18 +++++++- .../BatteryStationHdFeeStandardMapper.xml | 11 ++++- .../evotech/hd/gateway/config/CorsConfig.java | 3 ++ .../gateway/oauth2/MyAccessDeniedHandler.java | 6 ++- .../oauth2/MyAuthenticationEntryPoint.java | 1 + .../gateway/oauth2/ResourceServerConfig.java | 1 + .../exception/GlobalExceptionHandler.java | 10 ++++- .../oauth2/exception/GlobalExceptionType.java | 2 +- .../controller/CloudServeController.java | 12 +++++ .../controller/WechatUserController.java | 7 +++ .../hd/wechat/service/CloudService.java | 8 +++- .../hd/wechat/service/WechatUserService.java | 2 + .../service/impl/WechatUserServiceImpl.java | 23 +++++++++- 32 files changed, 240 insertions(+), 35 deletions(-) diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java b/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java index c4f907a..07850f9 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/controller/LoginController.java @@ -48,8 +48,8 @@ public class LoginController { @Operation(summary = "检验token") @PostMapping("/checktoken") - public Result checkToken(String token) throws AuthenticationException { - return loginService.checkToken(token); + public Result checkToken() { + return loginService.checkToken(); } diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java index 3846870..1e29814 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/LoginService.java @@ -13,5 +13,5 @@ public interface LoginService { public Result logout(HttpServletRequest request); - public Result checkToken(String token) throws AuthenticationException; + public Result checkToken(); } diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java index 13b7cbd..fc26067 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/service/impl/LoginServiceImpl.java @@ -190,10 +190,7 @@ public class LoginServiceImpl implements LoginService { @Override - public Result checkToken(String token) throws AuthenticationException { - // TODO 发送到自带的token验证接口 验证 - - + public Result checkToken() { return new Result().success(true); } diff --git a/authorization-server/src/main/java/com/evotech/hd/authorization/utils/Oauth2AccessTokenUtil.java b/authorization-server/src/main/java/com/evotech/hd/authorization/utils/Oauth2AccessTokenUtil.java index deb675d..34cc32b 100644 --- a/authorization-server/src/main/java/com/evotech/hd/authorization/utils/Oauth2AccessTokenUtil.java +++ b/authorization-server/src/main/java/com/evotech/hd/authorization/utils/Oauth2AccessTokenUtil.java @@ -35,7 +35,7 @@ public class Oauth2AccessTokenUtil { tokenRes.setTokenType(jo1.getStr("token_type")); return tokenRes; } else { - throw new RuntimeException("生成token出错"); + throw new RuntimeException("生成登陆令牌异常!"); } } diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java index 32963ec..d72cca8 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/BatteryStationDc.java @@ -51,17 +51,18 @@ public class BatteryStationDc implements Serializable { @NotNull(message = "初始来源不能为空") private Integer sourceFrom; - @Schema(description = "站码或车牌照") + @Schema(description = "站码或车牌照", requiredMode = RequiredMode.REQUIRED) + @NotBlank private String sourceCode; - @Schema(description = "状态:1-出租中,2-充电中,3-充电完毕,4-故障,5-其它", requiredMode = RequiredMode.REQUIRED) + @Schema(description = "状态:1-出租中,2-充电中,3-空闲,4-故障,5-其它", requiredMode = RequiredMode.REQUIRED) @NotNull(message = "状态不能为空") private Integer status; @Schema(description = "换电站编码") private String stationCode; - @Schema(description = "换电站编码") + @Schema(description = "换电站名称") private String stationName; @Schema(description = "当前电量") 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 5a9b447..85dac8f 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 @@ -54,6 +54,15 @@ public class BatteryStationHdFeeStandard implements Serializable { @Schema(description = "结束日期", requiredMode = RequiredMode.REQUIRED, example = DatePattern.PURE_DATE_PATTERN) @NotBlank(message = "结束时间不能为空") private String dayEnd; + + @Schema(description = "每公里收费") + private BigDecimal eachKmFee; + + @Schema(description = "每SOC收费") + private BigDecimal eachSocFee; + + @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/OrderSwapBattery.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/OrderSwapBattery.java index 0c22712..8eb8d7f 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 @@ -81,7 +81,7 @@ public class OrderSwapBattery implements Serializable { private Integer feeType; @Schema(description = "基础费用") - private Integer basicFee; + private BigDecimal basicFee; @Schema(description = "服务开始时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @@ -94,7 +94,7 @@ public class OrderSwapBattery implements Serializable { private Date serviceTimeEnd; @Schema(description = "服务费") - private Integer serviceFee; + private BigDecimal serviceFee; @Schema(description = "上次租赁电池时车辆里程") private BigDecimal lastRentBatCarOdo; diff --git a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/PageListSwapOrderRequest.java b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/PageListSwapOrderRequest.java index e8d1e1f..8870ee6 100644 --- a/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/PageListSwapOrderRequest.java +++ b/base-commons/common-core/src/main/java/com/evotech/hd/common/core/entity/cloud/PageListSwapOrderRequest.java @@ -48,6 +48,9 @@ public class PageListSwapOrderRequest extends BasePageRequest { @Schema(description = "交易编码") private String tradeNo; + + @Schema(description = "订单状态:1-已创建,2-换电中,3-换电完成,4-充电中,5-充电完成,6-待结算,7-已完成,9-已取消") + private String status; diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java index 4a59509..779ce7b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/controller/customer/VehicleController.java @@ -26,7 +26,7 @@ import jakarta.validation.constraints.NotBlank; @Tag(name = "车辆管理") -@ApiSupport(order = 21) +@ApiSupport(order = 31) @RestController @RequestMapping("/vehicle") public class VehicleController { @@ -64,9 +64,16 @@ public class VehicleController { return vehicleService.list(plvr); } + @Operation(summary = "公司关联") + @PostMapping("/company/relation") + @ApiOperationSupport(order = 5) + public Result companyRelation(String plateNum, String ccode, String cname) { + return vehicleService.companyRelation(plateNum, ccode, cname); + } + @Operation(summary = "微信用户关联") @PostMapping("/wechatuser/relation/add") - @ApiOperationSupport(order = 5) + @ApiOperationSupport(order = 6) public Result addWechatUserRelation(@Valid @ParameterObject VehicleWechatUserRelation relation) { return vehicleService.addWechatUserRelation(relation); } @@ -74,7 +81,7 @@ public class VehicleController { @Operation(summary = "删除微信用户关联") @PostMapping("/wechatuser/relation/del") - @ApiOperationSupport(order = 6) + @ApiOperationSupport(order = 7) public Result deleteWechatUserRelation(Integer id) { return vehicleService.deleteWechatUserRelation(id); } @@ -82,9 +89,12 @@ public class VehicleController { @Operation(summary = "查询微信用户车辆") @GetMapping("/wechatuser/relation/list") - @ApiOperationSupport(order = 7) - public Result> listWechatUserRelation(@NotBlank @RequestParam String openid) { - return vehicleService.listWechatUserRelation(openid, null); + @ApiOperationSupport(order = 8) + public Result> listWechatUserRelation(@NotBlank @RequestParam String wuid) { + return vehicleService.listWechatUserRelation(wuid, null); } + + + } 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 c867450..280cc84 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 @@ -6,6 +6,7 @@ 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.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.evotech.hd.cloud.service.OrderSwapBatteryService; @@ -91,5 +92,12 @@ public class OrderSwapBatteryController { public Result> listStep(@NotBlank String orderNo) { return orderSwapBatteryService.listStep(orderNo); } + + @Operation(summary = "费用计算") + @PostMapping({"/cost"}) + @ApiOperationSupport(order = 9) + public Result calculateCost(@NotBlank @RequestParam String orderNo) { + return orderSwapBatteryService.calculateCost(orderNo); + } } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationHdFeeStandardDao.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationHdFeeStandardDao.java index 18d02a7..23bdec1 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationHdFeeStandardDao.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/dao/BatteryStationHdFeeStandardDao.java @@ -2,6 +2,8 @@ package com.evotech.hd.cloud.dao; import java.util.List; +import org.apache.ibatis.annotations.Param; + import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard; @@ -11,6 +13,6 @@ import com.evotech.hd.common.core.entity.cloud.BatteryStationHdFeeStandard; */ public interface BatteryStationHdFeeStandardDao extends BaseMapper { - List listFeeStandard(String stationCode); + List listFeeStandard(@Param("stationCode") String stationCode, @Param("day") String day); } 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 5723b91..6f41201 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 @@ -1,5 +1,6 @@ package com.evotech.hd.cloud.mqtt.message.handle; +import java.time.LocalTime; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -12,6 +13,7 @@ import org.springframework.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.evotech.hd.cloud.dao.BatteryStationDcDao; +import com.evotech.hd.cloud.dao.BatteryStationHdFeeStandardDao; import com.evotech.hd.cloud.dao.OrderSwapBatteryDao; import com.evotech.hd.cloud.dao.OrderSwapBatteryPreDao; import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao; @@ -29,10 +31,11 @@ import com.evotech.hd.cloud.mqtt.message.dto.newer.req.order.OrderData; import com.evotech.hd.cloud.service.OrderSwapBatteryService; import com.evotech.hd.cloud.utils.CommonUtil; import com.evotech.hd.common.core.entity.cloud.BatteryStationDc; +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.entity.cloud.OrderSwapBatteryPre; import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation; - import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONObject; @@ -57,6 +60,8 @@ public class RequestMessageService { private OrderSwapBatteryPreDao orderSwapBatteryPreDao; @Resource private OrderSwapBatteryService orderSwapBatteryService; + @Resource + private BatteryStationHdFeeStandardDao batteryStationHdFeeStandardDao; @Async("taskExecutor") public void request(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) { @@ -102,6 +107,7 @@ public class RequestMessageService { OrderSwapBatteryPre osbp = orderSwapBatteryPreDao.selectOne(new QueryWrapper() .eq("plate_num", orderByPlateNumReq.getPlateNum()) .eq("station_code", orderByPlateNumReq.getStationCode()) + .eq("status", 1) .last("limit 1")); if (osbp == null) { response.setOrderRequestId(orderByPlateNumReq.getOrderRequestId()); @@ -127,6 +133,28 @@ public class RequestMessageService { osb.setStatus(1); osb.setStationCode(osbp.getStationCode()); osb.setStationName(osbp.getStationName()); + // 加上费用标准 + List list = batteryStationHdFeeStandardDao.listFeeStandard(osbp.getStationCode(), DateUtil.format(d, DatePattern.PURE_DATE_FORMATTER)); + if (!list.isEmpty()) { + BatteryStationHdFeeStandard standard = list.get(0); + List detailList = standard.getDetailList(); + if (!detailList.isEmpty()) { + detailList = detailList.stream().filter(i -> i.getTimeBegin().compareTo(LocalTime.now()) <= 0) + .filter(i -> i.getTimeEnd().compareTo(LocalTime.now()) >= 0).toList(); + if (!detailList.isEmpty()) { + BatteryStationHdFeeStandardDetail detail = detailList.get(0); + osb.setBasicFee(detail.getEachKwhFee()); + osb.setServiceFee(detail.getTimeServiceFee()); + } else { + osb.setBasicFee(standard.getEachKwhFee()); + osb.setServiceFee(standard.getCommonRemainFee()); + } + } else { + osb.setBasicFee(standard.getEachKwhFee()); + osb.setServiceFee(standard.getCommonRemainFee()); + } + } + orderSwapBatteryService.add(osb); } // 返回数据 diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java index 35d25cc..41899b0 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/mqtt/message/handle/StateMessageService.java @@ -119,6 +119,7 @@ public class StateMessageService { bt1.setBeginTime(orderStatus.getStatusTime()); bt1.setPointType(2); bt1.setPointCode(osb.getPlateNum()); + bt1.setPointName(osb.getPlateNum()); bt1.setCreater("SYS"); BatteryTrace bt2 = new BatteryTrace(); BeanUtils.copyProperties(bt1, bt2); 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 6eae35a..2913e5f 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 @@ -25,5 +25,7 @@ public interface OrderSwapBatteryService { public Result> list(PageListSwapOrderRequest plsor); public Result> listStep(String orderNo); + + public Result calculateCost(String orderNo); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java index 92fbfa1..a5e3ee7 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/VehicleService.java @@ -17,6 +17,8 @@ public interface VehicleService { public Result> list(PageListVehicleRequest plvr); + public Result companyRelation(String plateNum, String ccode, String cname); + public Result addWechatUserRelation(VehicleWechatUserRelation relation); public Result deleteWechatUserRelation(Integer id); diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java index c9bccb4..065c08b 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationDcServiceImpl.java @@ -40,7 +40,7 @@ public class BatteryStationDcServiceImpl implements BatteryStationDcService { bt.setCreater("SYS"); bt.setPointType(bsdc.getSourceFrom()); bt.setPointCode(bt.getPointType() == 1? bsdc.getStationCode():bsdc.getSourceCode()); - bt.setPointName(bt.getPointType() == 1? bsdc.getStationName():""); + bt.setPointName(bt.getPointType() == 1? bsdc.getStationName():bsdc.getSourceCode()); addTrace(bt); return new Result().success(n); } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java index b436a64..6936ce0 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardDetailServiceImpl.java @@ -22,6 +22,14 @@ public class BatteryStationHdFeeStandardDetailServiceImpl implements BatteryStat @Override public Result add(BatteryStationHdFeeStandardDetail bsfsd) { + boolean b = batteryStationHdFeeStandardDetailDao.exists(new QueryWrapper() + .or(i -> i.and(j -> j.le("time_begin", bsfsd.getTimeBegin()).ge("time_end", bsfsd.getTimeBegin())) + .or(j -> j.le("time_begin", bsfsd.getTimeEnd()).ge("time_end", bsfsd.getTimeEnd())) + .or(j -> j.ge("day_begin", bsfsd.getTimeBegin()).le("day_end", bsfsd.getTimeEnd()))) + .eq("standard_id", bsfsd.getStandardId())); + if (b) { + return new Result().error("换电站费用标准明细时间冲突!"); + } bsfsd.setCtime(new Date()); int n = batteryStationHdFeeStandardDetailDao.insert(bsfsd); if (n == 1) { diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java index fda97da..b097da6 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/BatteryStationHdFeeStandardServiceImpl.java @@ -27,6 +27,15 @@ public class BatteryStationHdFeeStandardServiceImpl implements BatteryStationHdF @Override public Result add(BatteryStationHdFeeStandard bsfs) { + boolean b = batteryStationHdFeeStandardDao.exists(new QueryWrapper() + .or(i -> i.and(j -> j.le("day_begin", bsfs.getDayBegin()).ge("day_end", bsfs.getDayBegin())) + .or(j -> j.le("day_begin", bsfs.getDayEnd()).ge("day_end", bsfs.getDayEnd())) + .or(j -> j.ge("day_begin", bsfs.getDayBegin()).le("day_end", bsfs.getDayEnd()))) + .eq("station_code", bsfs.getStationCode())); + if (b) { + return new Result().error("换电站费用标准日期冲突!"); + } + bsfs.setCtime(new Date()); int n = batteryStationHdFeeStandardDao.insert(bsfs); if (n == 1) { @@ -57,7 +66,7 @@ public class BatteryStationHdFeeStandardServiceImpl implements BatteryStationHdF @Override public Result> list(String stationCode) { - List list = batteryStationHdFeeStandardDao.listFeeStandard(stationCode); + List list = batteryStationHdFeeStandardDao.listFeeStandard(stationCode, null); if (list.isEmpty()) { return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } 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 d84da6f..688fd6c 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,5 +1,8 @@ package com.evotech.hd.cloud.service.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -135,18 +138,29 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { public Result> list(PageListSwapOrderRequest plsor) { Page page = new Page(plsor.getPageNo(), plsor.getPageSize()); + List plateNumList = new ArrayList(); + 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(i -> Integer.valueOf(i)).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(StringUtils.hasText(plsor.getPlateNums()), "plate_num", Arrays.asList(plsor.getPlateNums().split(","))) + .in(!plateNumList.isEmpty(), "plate_num", plateNumList) + .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()), "user_id", plsor.getUserId()) + .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")); + System.out.println(page.getTotal()); if (page.getRecords().isEmpty()) { return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } @@ -163,4 +177,31 @@ public class OrderSwapBatteryServiceImpl implements OrderSwapBatteryService { return new Result>().success(list); } + @Override + public Result calculateCost(String orderNo) { + OrderSwapBattery order = orderSwapBatteryDao.selectOne(new QueryWrapper().eq("order_no", orderNo)); + if (order == null) { + return new Result().error("无此订单!"); + } + // 1. 检查状态 + if (order.getStatus() != 5) { + return new Result().error("订单状态异常!"); + } + // 2. 检查数据 + if (order.getBasicFee() == null || order.getServiceFee() == null) { + return new Result().error("订单费用标准异常!"); + } + // 3. 选择费用计算方式 计算费用 + // 先按电量计算 + if (order.getElectAmount() == null) { + return new Result().error("充电订单 充电量 异常!"); + } + BigDecimal fee = order.getServiceFee().add(order.getBasicFee().multiply(order.getElectAmount())).setScale(0, RoundingMode.HALF_UP); + // 4. 修改订单 + order.setAmount(fee.intValue()); + order.setStatus(6); + orderSwapBatteryDao.updateById(order); + return new Result().success(fee); + } + } diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java index 2db9e6d..ddd6e0e 100644 --- a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/service/impl/VehicleServiceImpl.java @@ -78,6 +78,18 @@ public class VehicleServiceImpl implements VehicleService { } return new Result>().success(page); } + + @Override + public Result companyRelation(String plateNum, String ccode, String cname) { + VehicleInfo vi = new VehicleInfo(); + vi.setCcode(ccode); + vi.setCname(cname); + int n = vehicleInfoDao.update(vi, new QueryWrapper().eq("plate_num", plateNum)); + if (n == 1) { + return new Result().success(n); + } + return new Result().error("关联公司失败!"); + } @Override public Result addWechatUserRelation(VehicleWechatUserRelation relation) { @@ -99,8 +111,8 @@ public class VehicleServiceImpl implements VehicleService { } @Override - public Result> listWechatUserRelation(String openid, String plateNum) { - List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper().eq(StringUtils.hasText(openid), "openid", openid)); + public Result> listWechatUserRelation(String wuid, String plateNum) { + List relationList = vehicleWechatUserRelationDao.selectList(new QueryWrapper().eq(StringUtils.hasText(wuid), "ucode", wuid)); if (relationList.isEmpty()) { return new Result>().error(CodeMsg.DATABASE_RESULT_NULL); } @@ -112,4 +124,6 @@ public class VehicleServiceImpl implements VehicleService { return new Result>().success(list); } + + } diff --git a/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardMapper.xml b/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardMapper.xml index 53d4df5..512af7c 100644 --- a/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardMapper.xml +++ b/cloud-manage-server/src/main/resources/mapper/BatteryStationHdFeeStandardMapper.xml @@ -8,6 +8,9 @@ + + + @@ -26,7 +29,7 @@ - pk_id, station_code, day_begin, day_end, common_remain_fee, common_remain_soc_range, more_remain_soc, more_remain_fee, few_remain_soc, few_remain_fee, ctime, creater, uptime, updater + pk_id, station_code, day_begin, day_end, each_km_fee, each_soc_fee, each_kwh_fee, common_remain_fee, common_remain_soc_range, more_remain_soc, more_remain_fee, few_remain_soc, few_remain_fee, ctime, creater, uptime, updater diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/config/CorsConfig.java b/gateway-server/src/main/java/com/evotech/hd/gateway/config/CorsConfig.java index 7f45c53..92117c2 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/config/CorsConfig.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/config/CorsConfig.java @@ -12,6 +12,9 @@ import org.springframework.web.reactive.config.WebFluxConfigurer; @Configuration public class CorsConfig implements WebFluxConfigurer { + /** + * 这个是servlet里面的,不起作用 + */ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java index d75ea3e..8276adb 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAccessDeniedHandler.java @@ -32,11 +32,15 @@ public class MyAccessDeniedHandler implements ServerAccessDeniedHandler { @Override public Mono handle(ServerWebExchange exchange, AccessDeniedException e) { // log.error("\r\n===>>>" + this.getClass().getName()); - System.out.println("6666666666"); e.printStackTrace(); ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.OK); response.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + // 为了解决token过期时,前端不出现跨域错误,添加了一些header,注意Access-Control-Allow-Origin的值 + response.getHeaders().add("Access-Control-Allow-Origin", "*"); + response.getHeaders().add("Access-Control-Allow-Credentials", "true"); + response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); + response.getHeaders().add("Access-Control-Allow-Headers", HttpHeaders.AUTHORIZATION); String body= JSONUtil.toJsonStr(new Result().bussinessException(CodeMsg.ACCESS_DENY.getCode(), CodeMsg.ACCESS_DENY.getMsg(), e.getMessage())); DataBuffer buffer = response.bufferFactory().wrap(body.getBytes(Charset.forName("UTF-8"))); return response.writeWith(Mono.just(buffer)); diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java index 0569975..ddb1e4b 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/MyAuthenticationEntryPoint.java @@ -55,6 +55,7 @@ public class MyAuthenticationEntryPoint implements ServerAuthenticationEntryPoin } else if (cause instanceof BadJwtException || cause instanceof JwtEncodingException) { res = new Result().error(CodeMsg.TOKEN_INVALID.getCode(), CodeMsg.TOKEN_INVALID.getMsg(), cause.getMessage()); } else if (cause instanceof InvalidBearerTokenException) { + System.out.println("8888888"); String token = exchange.getRequest().getHeaders().getFirst("Authorization").substring(7); String dateTime = DateUtil.formatDateTime(TokenUtil.getExp(token)); res = new Result().bussinessException(CodeMsg.TOKEN_EXPIRED.getCode(), CodeMsg.TOKEN_EXPIRED.getMsg(), "Jwt expired at " + dateTime); diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/ResourceServerConfig.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/ResourceServerConfig.java index ab21757..70cba7f 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/ResourceServerConfig.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/ResourceServerConfig.java @@ -40,6 +40,7 @@ public class ResourceServerConfig { http.csrf(csrf -> csrf.disable()); // 跨域处理 http.cors(Customizer.withDefaults()); +// http.cors(cors -> cors.disable()); http.httpBasic(httpBasicSpec -> httpBasicSpec.disable()); // 资源服务器配置 http.oauth2ResourceServer(server -> server diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionHandler.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionHandler.java index fc7a7f1..c8ec955 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionHandler.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionHandler.java @@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.web.WebProperties.Resources; import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler; import org.springframework.boot.web.reactive.error.ErrorAttributes; import org.springframework.context.ApplicationContext; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.reactive.function.BodyInserters; @@ -48,12 +49,17 @@ public class GlobalExceptionHandler extends DefaultErrorWebExceptionHandler { @Override protected Mono renderErrorResponse(ServerRequest request) { // Map error = getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.ALL)); - Throwable throwable = getError(request); - return ServerResponse + Throwable throwable = getError(request); + return ServerResponse // .status(super.getHttpStatus(error)) .status(HttpStatus.OK) .contentType(MediaType.APPLICATION_JSON) // .body(BodyInserters.fromValue(new RuntimeException())) + // 为了解决token过期时,前端不出现跨域错误,添加了一些header + .header("Access-Control-Allow-Origin", "*") + .header("Access-Control-Allow-Credentials", "true") + .header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD") + .header("Access-Control-Allow-Headers", HttpHeaders.AUTHORIZATION) .body(BodyInserters.fromValue(globalExceptionType.handle(throwable))) ; diff --git a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java index 58cc07f..baf1b87 100644 --- a/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java +++ b/gateway-server/src/main/java/com/evotech/hd/gateway/oauth2/exception/GlobalExceptionType.java @@ -29,7 +29,7 @@ public class GlobalExceptionType { @ExceptionHandler(value = {OAuth2AuthorizationException.class}) public Result oAuth2AuthorizationHandle(OAuth2AuthorizationException e) { - e.printStackTrace(); + e.printStackTrace(); OAuth2Error error = e.getError(); return new Result().bussinessException(error.getErrorCode(), error.getDescription(), error.getUri()); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java index 88da191..9aafcb8 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/CloudServeController.java @@ -1,8 +1,10 @@ package com.evotech.hd.wechat.controller; import java.util.List; +import java.util.Map; import org.springdoc.core.annotations.ParameterObject; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -61,6 +63,9 @@ public class CloudServeController { @GetMapping("/order/swap/list") @ApiOperationSupport(order = 7) public Result> list(@ParameterObject PageListSwapOrderRequest plsor) { + if (!StringUtils.hasText(plsor.getUserId())) { + return null; + } return cloudService.list(plsor); } @@ -77,5 +82,12 @@ public class CloudServeController { public Result> listStation(@RequestParam(required = false) String plateNum) { return cloudService.listStation(plateNum); } + + @Operation(summary = "公司编码查询公司") + @GetMapping("/company/companyByCode") + @ApiOperationSupport(order = 10) + public Result> companyByCode(String ccode) { + return cloudService.companyByCode(ccode); + } } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java index 883debd..43ae806 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/WechatUserController.java @@ -36,5 +36,12 @@ public class WechatUserController { public Result userByUid(String wuid) { return wechatUserService.userByUid(wuid); } + + @Operation(summary = "绑定公司") + @PostMapping("/bindcompany") + public Result bindCompany(String wuid, String code, String name) { + return wechatUserService.bindCompany(wuid, code, name); + } + } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/CloudService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/CloudService.java index 6928fa6..dad1aed 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/CloudService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/CloudService.java @@ -1,8 +1,10 @@ package com.evotech.hd.wechat.service; import java.util.List; +import java.util.Map; import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -32,7 +34,7 @@ public interface CloudService { @GetMapping(value = "/cloud/order/swap/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) - public Result> list(PageListSwapOrderRequest plsor); + public Result> list(@SpringQueryMap PageListSwapOrderRequest plsor); @GetMapping(value = "/cloud/order/swap/step/list", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) @@ -42,5 +44,9 @@ public interface CloudService { consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public Result> listStation(@RequestParam String plateNum); // public Result> listStation(@SpringQueryMap BasePageRequest bpr); + + @GetMapping(value = "/cloud/company/companyByCode", + consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public Result> companyByCode(@RequestParam String ccode); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java index eb8b807..5c8bde2 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/WechatUserService.java @@ -8,5 +8,7 @@ public interface WechatUserService { public Result update(WechatUser wuser); public Result userByUid(String wuid); + + public Result bindCompany(String wuid, String code, String name); } diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java index f9ef3b9..f7d5caa 100644 --- a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/WechatUserServiceImpl.java @@ -22,11 +22,17 @@ public class WechatUserServiceImpl implements WechatUserService { @Override public Result update(WechatUser wuser) { - int n = wechatUserDao.update(wuser, new QueryWrapper().eq("wuid", wuser.getWuid())); + WechatUser user = new WechatUser(); + user.setName(wuser.getName()); + user.setGender(wuser.getGender()); + user.setNickName(wuser.getNickName()); + user.setPhoneNumber(wuser.getPhoneNumber()); + user.setAvatarUrl(wuser.getAvatarUrl()); + int n = wechatUserDao.update(user, new QueryWrapper().eq("wuid", wuser.getWuid())); if (n == 1) { return new Result().success(1); } - return new Result().error("修改微信用户信息出错"); + return new Result().error("修改微信用户信息出错!"); } @Override @@ -40,4 +46,17 @@ public class WechatUserServiceImpl implements WechatUserService { return new Result().success(user); } + @Override + public Result bindCompany(String wuid, String code, String name) { + WechatUser user = new WechatUser(); + user.setType(2); + user.setPcode(code); + user.setPname(name); + int n = wechatUserDao.update(user, new QueryWrapper().eq("wuid", wuid)); + if (n == 1) { + return new Result().success(1); + } + return new Result().error("绑定出错!"); + } + }