From 4c96637a005891c709662ae84edd072ad9a4a57d Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期二, 08 十月 2024 15:13:07 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 43 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryServiceImpl.java | 36 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java | 57 ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLoginLog.java | 2 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java | 7 ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml | 2 ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java | 1 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/FileUploadUtils.java | 4 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java | 31 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java | 4 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java | 21 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java | 7 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml | 2 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/SecurityDetection.java | 19 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SecurityDetectionClient.java | 26 ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryMessage.java | 21 ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml | 55 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java | 3 ruoyi-gateway/src/main/resources/bootstrap.yml | 3 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java | 48 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java | 27 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java | 44 ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | 12 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java | 32 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java | 109 + ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ShoppingOrderClient.java | 29 ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml | 55 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java | 48 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AlipayOpenAppQrcodeCreate.java | 59 + ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java | 10 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java | 40 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/AcquisitionBillingModeReply.java | 1 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxAppletTools.java | 1 ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 22 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java | 79 + ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/SecurityDetectionServiceImpl.java | 50 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java | 10 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java | 5 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java | 4 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 30 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java | 6 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java | 9 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java | 2 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDeliveryReply.java | 17 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java | 29 ruoyi-auth/src/main/resources/bootstrap.yml | 55 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryReplyServiceImpl.java | 36 ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml | 55 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java | 2 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml | 23 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TCouponServiceImpl.java | 7 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 796 +++++++-------- ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDelivery.java | 20 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java | 30 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PlatformStartChargingReply.java | 1 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java | 1 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java | 8 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteQuery.java | 3 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java | 38 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java | 5 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryService.java | 11 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java | 6 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java | 2 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/DeleteDeviceResp.java | 19 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java | 10 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/SecurityDetectionController.java | 34 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java | 8 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteVO.java | 4 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java | 4 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/SecurityDetectionMessage.java | 21 ruoyi-auth/pom.xml | 4 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java | 5 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java | 6 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java | 14 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java | 2 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java | 6 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SecurityDetectionFallbackFactory.java | 35 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TEvaluationTagMapper.xml | 4 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDeviceResp.java | 69 + ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java | 2 ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml | 57 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java | 6 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java | 12 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java | 10 ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml | 46 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java | 25 ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports | 3 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java | 12 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java | 33 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java | 3 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TExchangeOrderMapper.xml | 23 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java | 9 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryReplyService.java | 11 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryReplyMessage.java | 18 ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java | 15 ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ShoppingOrderFallbackFactory.java | 31 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java | 84 + ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java | 6 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java | 15 ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/SecurityDetectionService.java | 18 ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml | 55 ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDevice.java | 27 ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java | 23 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java | 10 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java | 6 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java | 2 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java | 60 + ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml | 2 116 files changed, 2,288 insertions(+), 824 deletions(-) diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java index 80a88a5..a0a477c 100644 --- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java +++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserCarClient.java @@ -26,7 +26,7 @@ * @param carIds 车辆id集合 * @return */ - @PostMapping(value = "/t-app-user-car/getCarByIds") + @PostMapping(value = "/t-app-user-car/t-app-user-car/getCarByIds") public R<List<TAppUserCar>> getCarByIds(@RequestBody List<Long> carIds); diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java new file mode 100644 index 0000000..d2f3666 --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/PartnerFallbackFactory.java @@ -0,0 +1,32 @@ +package com.ruoyi.chargingPile.api.factory; + +import com.ruoyi.chargingPile.api.feignClient.PartnerClient; +import com.ruoyi.chargingPile.api.model.Partner; +import com.ruoyi.common.core.domain.R; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +/** + * 充电桩服务降级处理 + * + * @author ruoyi + */ +@Component +public class PartnerFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<PartnerClient> { + private static final Logger log = LoggerFactory.getLogger(PartnerFallbackFactory.class); + + @Override + public PartnerClient create(Throwable throwable) { + log.error("调用失败:{}", throwable.getMessage()); + return new PartnerClient() { + + + @Override + public R<Partner> getPartnerById(Integer id) { + return R.fail("根据id获取合作商信息失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java new file mode 100644 index 0000000..198aeaa --- /dev/null +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/PartnerClient.java @@ -0,0 +1,27 @@ +package com.ruoyi.chargingPile.api.feignClient; + +import com.ruoyi.chargingPile.api.factory.PartnerFallbackFactory; +import com.ruoyi.chargingPile.api.model.Partner; +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.web.domain.AjaxResult; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @author zhibing.pu + * @Date 2024/9/30 9:36 + */ +@FeignClient(contextId = "PartnerClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = PartnerFallbackFactory.class) +public interface PartnerClient { + + + /** + * 根据id获取合作商信息 + * @param id + * @return + */ + @PostMapping("/partner/getPartnerById/{id}") + R<Partner> getPartnerById(@PathVariable("id") Integer id); +} diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java index 2bef523..65a9109 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingGun.java @@ -111,4 +111,8 @@ @TableField("remark") private String remark; + @ApiModelProperty(value = "已充电百分比") + @TableField(exist = false) + private Integer soc; + } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java index e1d69a9..fe22081 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/model/TChargingPile.java @@ -96,4 +96,8 @@ @ApiModelProperty(value = "设备状态(1=工作中,2=离线,3=故障)") @TableField("status") private Integer status; + + @ApiModelProperty(value = "iotd设备id") + @TableField("iotd_device_id") + private String iotdDeviceId; } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteQuery.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteQuery.java index 7eb33df..57a9cbb 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteQuery.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/query/SiteQuery.java @@ -26,4 +26,7 @@ @NotNull(message = "地址纬度不能为空") private String lat; + @ApiModelProperty(value = "城市code") + private String cityCode; + } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteVO.java index e0807ae..4f0963f 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteVO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/SiteVO.java @@ -23,6 +23,10 @@ private Integer fastFreeCount; @ApiModelProperty(value = "慢充空闲数量") private Integer slowFreeCount; + @ApiModelProperty(value = "原始电价") + private BigDecimal electrovalenceOriginal; + @ApiModelProperty(value = "服务费") + private BigDecimal serviceCharge; @ApiModelProperty(value = "普通电价") private BigDecimal electrovalence; @ApiModelProperty(value = "会员电价") diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java index 2c026bc..dcddb54 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/StrategyPriceVO.java @@ -23,4 +23,7 @@ @ApiModelProperty(value = "服务费折扣") private BigDecimal serviceFeeDiscount; + @ApiModelProperty(value = "折扣") + private BigDecimal discount; + } diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 3de243c..ed69db2 100644 --- a/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -5,4 +5,5 @@ com.ruoyi.chargingPile.api.factory.AccountingStrategyDetailFallbackFactory com.ruoyi.chargingPile.api.factory.AccountingStrategyFallbackFactory com.ruoyi.chargingPile.api.factory.ParkingRecordFallbackFactory -com.ruoyi.chargingPile.api.factory.FaultMessageFallbackFactory \ No newline at end of file +com.ruoyi.chargingPile.api.factory.FaultMessageFallbackFactory +com.ruoyi.chargingPile.api.factory.PartnerFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java new file mode 100644 index 0000000..c7050fa --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/IotInterfaceFallbackFactory.java @@ -0,0 +1,40 @@ +package com.ruoyi.integration.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.feignClient.IotInterfaceClient; +import com.ruoyi.integration.api.feignClient.SwitchwayGateClient; +import com.ruoyi.integration.api.vo.AddDevice; +import com.ruoyi.integration.api.vo.AddDeviceResp; +import com.ruoyi.integration.api.vo.DeleteDeviceResp; +import com.ruoyi.integration.api.vo.SwitchwayGateReq; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * 充电桩服务降级处理 + * + * @author ruoyi + */ +@Component +public class IotInterfaceFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<IotInterfaceClient> { + private static final Logger log = LoggerFactory.getLogger(IotInterfaceFallbackFactory.class); + + @Override + public IotInterfaceClient create(Throwable throwable) { + log.error("调用失败:{}", throwable.getMessage()); + return new IotInterfaceClient() { + + + @Override + public R<AddDeviceResp> addDevice(AddDevice addDevice) { + return R.fail("添加设备失败:" + throwable.getMessage()); + } + + @Override + public R<DeleteDeviceResp> deleteDevice(String deviceId) { + return R.fail("删除设备失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SecurityDetectionFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SecurityDetectionFallbackFactory.java new file mode 100644 index 0000000..5445dd3 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SecurityDetectionFallbackFactory.java @@ -0,0 +1,35 @@ +package com.ruoyi.integration.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.feignClient.SecurityDetectionClient; +import com.ruoyi.integration.api.feignClient.SendMessageClient; +import com.ruoyi.integration.api.model.PlatformStartCharging; +import com.ruoyi.integration.api.model.PlatformStopCharging; +import com.ruoyi.integration.api.model.QrCodeDelivery; +import com.ruoyi.integration.api.model.SecurityDetection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +/** + * 充电桩服务降级处理 + * + * @author ruoyi + */ +@Component +public class SecurityDetectionFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<SecurityDetectionClient> +{ + private static final Logger log = LoggerFactory.getLogger(SecurityDetectionFallbackFactory.class); + + @Override + public SecurityDetectionClient create(Throwable throwable) { + log.error("调用失败:{}", throwable.getMessage()); + return new SecurityDetectionClient() { + + @Override + public R<SecurityDetection> getSecurityDetection(String transactionSerialNumber) { + return R.fail("获取安全检测数据失败:" + throwable.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java index 89f13bb..e063231 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/factory/SendMessageFallbackFactory.java @@ -6,6 +6,7 @@ import com.ruoyi.integration.api.model.ChargingHandshake; import com.ruoyi.integration.api.model.PlatformStartCharging; import com.ruoyi.integration.api.model.PlatformStopCharging; +import com.ruoyi.integration.api.model.QrCodeDelivery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -36,6 +37,11 @@ public String platformStopCharging(PlatformStopCharging platformStopCharging) { return "远程停机失败"; } + + @Override + public String qrCodeDelivery(QrCodeDelivery qrCodeDelivery) { + return "二维码下发失败"; + } }; } } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java new file mode 100644 index 0000000..13f7b58 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/IotInterfaceClient.java @@ -0,0 +1,38 @@ +package com.ruoyi.integration.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.factory.IotInterfaceFallbackFactory; +import com.ruoyi.integration.api.vo.AddDevice; +import com.ruoyi.integration.api.vo.AddDeviceResp; +import com.ruoyi.integration.api.vo.DeleteDeviceResp; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/10/8 10:24 + */ +@FeignClient(contextId = "IotInterfaceClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = IotInterfaceFallbackFactory.class) +public interface IotInterfaceClient { + + + /** + * 添加设备 + * @param addDevice + * @return + */ + @PostMapping("/iotInterface/addDevice") + R<AddDeviceResp> addDevice(@RequestBody AddDevice addDevice); + + + /** + * 删除设备 + * @param deviceId + * @return + */ + @PostMapping("/iotInterface/deleteDevice") + R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId); +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SecurityDetectionClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SecurityDetectionClient.java new file mode 100644 index 0000000..ba6bf09 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SecurityDetectionClient.java @@ -0,0 +1,26 @@ +package com.ruoyi.integration.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory; +import com.ruoyi.integration.api.model.SecurityDetection; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/10/8 14:23 + */ +@FeignClient(contextId = "SecurityDetectionClient", value = ServiceNameConstants.INTEGRATION_SERVICE, fallbackFactory = SecurityDetectionFallbackFactory.class) +public interface SecurityDetectionClient { + + + /** + * 获取安全检测数据 + * @param transactionSerialNumber + * @return + */ + @PostMapping("/securityDetection/getSecurityDetection") + R<SecurityDetection> getSecurityDetection(@RequestParam("transactionSerialNumber") String transactionSerialNumber); +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java index df4db22..9d3263b 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/feignClient/SendMessageClient.java @@ -4,6 +4,7 @@ import com.ruoyi.integration.api.factory.SendMessageFallbackFactory; import com.ruoyi.integration.api.model.PlatformStartCharging; import com.ruoyi.integration.api.model.PlatformStopCharging; +import com.ruoyi.integration.api.model.QrCodeDelivery; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -32,4 +33,13 @@ */ @PostMapping("/sendMessage/platformStopCharging") String platformStopCharging(@RequestBody PlatformStopCharging platformStopCharging); + + + /** + * 二维码下发 + * @param qrCodeDelivery + * @return + */ + @PostMapping("/sendMessage/qrCodeDelivery") + String qrCodeDelivery(@RequestBody QrCodeDelivery qrCodeDelivery); } diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/AcquisitionBillingModeReply.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/AcquisitionBillingModeReply.java index 6546d89..1fc190a 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/AcquisitionBillingModeReply.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/AcquisitionBillingModeReply.java @@ -27,6 +27,7 @@ private BigDecimal low_peak_electricity_rate;// 谷电费费率(精确到五位小数) private BigDecimal low_peak_service_rate;// 谷服务费费率(精确到五位小数) private BigDecimal loss_ratio;// 计损比例 +// private DayTimeBase day_time_base; private Integer time1;// 0:00~0:30 时段费率号(0:尖费率,1:峰费率,2:平费率,3:谷费率) private Integer time2;// 0:30~1:00 时段费率号(0:尖费率,1:峰费率,2:平费率,3:谷费率) private Integer time3;// 0:30~1:00 时段费率号(0:尖费率,1:峰费率,2:平费率,3:谷费率) diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PlatformStartChargingReply.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PlatformStartChargingReply.java index 54f09f3..af8b03e 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PlatformStartChargingReply.java +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/PlatformStartChargingReply.java @@ -15,7 +15,6 @@ @Document(collection = "platform_start_charging_reply") //指定要对应的文档名(表名) @Accessors(chain = true) public class PlatformStartChargingReply extends BaseModel { - @Id private String transaction_serial_number; // 交易流水号 private String charging_pile_code; // 桩编码 private String charging_gun_code; // 抢号 diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDelivery.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDelivery.java new file mode 100644 index 0000000..1bf5898 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDelivery.java @@ -0,0 +1,20 @@ +package com.ruoyi.integration.api.model; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +@Data +@Document(collection = "qr_code_delivery") //指定要对应的文档名(表名) +@Accessors(chain = true) +public class QrCodeDelivery { + + @Id + private String charging_pile_code; // 桩编码 + private Integer code_format; // "0:第一种前缀+桩编号 1:第二种前缀+桩编号+枪编号" + private Integer prefix_length; // 二维码前缀长度长度最大不超过200 字节 + private String code_prefix; // 如:“www.baidu.com?No=” + private String qr_code; // 二维码内容,如:“www.baidu.com?No=3422000100023301” + +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDeliveryReply.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDeliveryReply.java new file mode 100644 index 0000000..6a63992 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/QrCodeDeliveryReply.java @@ -0,0 +1,17 @@ +package com.ruoyi.integration.api.model; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +@Data +@Document(collection = "qr_code_delivery_reply") //指定要对应的文档名(表名) +@Accessors(chain = true) +public class QrCodeDeliveryReply { + + @Id + private String charging_pile_code; // 桩编码 + private Integer delivery_result; // 设置结果(0:成功,1:失败) + +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/SecurityDetection.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/SecurityDetection.java new file mode 100644 index 0000000..06be3e2 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/model/SecurityDetection.java @@ -0,0 +1,19 @@ +package com.ruoyi.integration.api.model; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +@Data +@Document(collection = "security_detection") //指定要对应的文档名(表名) +@Accessors(chain = true) +public class SecurityDetection { + private String transaction_serial_number; // 交易流水号 + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer secure_connection; // 车枪连接(0=未连接,1=连接) + private Integer nsulation_detection; // 绝缘检测(0=安全,1=不安全) + private Integer electronic_lock_lock; // 电磁锁状态(0=未锁,1=已锁) + +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDevice.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDevice.java new file mode 100644 index 0000000..9479517 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDevice.java @@ -0,0 +1,27 @@ +package com.ruoyi.integration.api.vo; + +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/10/8 10:26 + */ +@Data +public class AddDevice { + /** + * 产品ID + */ + private String productId; + /** + * 设备标识码 设备编号 + */ + private String nodeId; + /** + * 设备名称 + */ + private String deviceName; + /** + * 设备描述 + */ + private String description; +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDeviceResp.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDeviceResp.java new file mode 100644 index 0000000..8fbe429 --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/AddDeviceResp.java @@ -0,0 +1,69 @@ +package com.ruoyi.integration.api.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + + +/** + * @author zhibing.pu + * @Date 2024/10/8 10:37 + */ +@Data +public class AddDeviceResp { + private int httpStatusCode; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("app_id") + private String appId; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("app_name") + private String appName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("device_id") + private String deviceId; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("node_id") + private String nodeId; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("gateway_id") + private String gatewayId; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("device_name") + private String deviceName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("node_type") + private String nodeType; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("description") + private String description; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("fw_version") + private String fwVersion; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("sw_version") + private String swVersion; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("device_sdk_version") + private String deviceSdkVersion; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("product_id") + private String productId; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("product_name") + private String productName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("status") + private String status; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("create_time") + private String createTime; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("connection_status_update_time") + private String connectionStatusUpdateTime; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("active_time") + private String activeTime; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("extension_info") + private Object extensionInfo; +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/DeleteDeviceResp.java b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/DeleteDeviceResp.java new file mode 100644 index 0000000..55376fd --- /dev/null +++ b/ruoyi-api/ruoyi-api-integration/src/main/java/com/ruoyi/integration/api/vo/DeleteDeviceResp.java @@ -0,0 +1,19 @@ +package com.ruoyi.integration.api.vo; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * @author zhibing.pu + * @Date 2024/10/8 10:40 + */ +@Data +public class DeleteDeviceResp { + @JsonIgnore + private int httpStatusCode; + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonProperty("body") + private String body; +} diff --git a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index fa602cc..e9bb146 100644 --- a/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-integration/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -4,4 +4,6 @@ com.ruoyi.integration.api.factory.SendMessageFallbackFactory com.ruoyi.integration.api.factory.PlatformStartChargingReplyFallbackFactory com.ruoyi.integration.api.factory.PlatformStopChargingReplyFallbackFactory -com.ruoyi.integration.api.factory.SwitchwayGateFallbackFactory \ No newline at end of file +com.ruoyi.integration.api.factory.SwitchwayGateFallbackFactory +com.ruoyi.integration.api.factory.IotInterfaceFallbackFactory +com.ruoyi.integration.api.factory.SecurityDetectionFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java index 294d7b0..f51d11a 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ChargingOrderFallbackFactory.java @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -33,6 +34,11 @@ public ChargingOrderClient create(Throwable throwable) { log.error("充电订单调用失败:{}", throwable.getMessage()); return new ChargingOrderClient() { + + @Override + public R<String> queryOrderByGunId(String id) { + return R.fail("远程调用根据枪id 查询最新的订单id 用户后台结束充电" + throwable.getMessage()); + } @Override public R<Long> useOrderCount(Long userId) { @@ -71,7 +77,7 @@ } @Override - public R<Long> getCar() { + public R<Long> getCar(@PathVariable("id")String id) { return R.fail("获取用户最近使用车辆充电的车辆id:" + throwable.getMessage()); } @@ -128,6 +134,12 @@ public void chargingOrderStartupFailureWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) { log.error("远程启动失败后退款通知失败:" + throwable.getMessage()); } + + @Override + public void shoppingOrderWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) { + log.error("购物订单退款回调通知失败:" + throwable.getMessage()); + + } }; } } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ShoppingOrderFallbackFactory.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ShoppingOrderFallbackFactory.java new file mode 100644 index 0000000..9ce69c9 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/factory/ShoppingOrderFallbackFactory.java @@ -0,0 +1,31 @@ +package com.ruoyi.order.api.factory; + +import com.ruoyi.order.api.feignClient.ShoppingOrderClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + + +/** + * 充电订单服务降级处理 + * + * @author ruoyi + */ +@Component +public class ShoppingOrderFallbackFactory implements org.springframework.cloud.openfeign.FallbackFactory<ShoppingOrderClient> { + private static final Logger log = LoggerFactory.getLogger(ShoppingOrderFallbackFactory.class); + + + @Override + public ShoppingOrderClient create(Throwable cause) { + log.error("调用失败:{}", cause.getMessage()); + return new ShoppingOrderClient() { + + + @Override + public void cancelShoppingOrderWxRefund(String out_refund_no, String refund_id, String tradeState, String success_time) { + log.error("商城订单去掉退款回调通知失败:" + cause.getMessage()); + } + }; + } +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java index c92882a..0dc3302 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java @@ -28,6 +28,9 @@ */ @FeignClient(contextId = "ChargingOrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = ChargingOrderFallbackFactory.class) public interface ChargingOrderClient { + + @PostMapping(value = "/t-charging-order/queryOrderByGunId/{id}") + R<String> queryOrderByGunId(@PathVariable("id") String id); @PostMapping(value = "/t-charging-order/useOrderCount") R<Long> useOrderCount(@RequestParam("userId") Long userId); @PostMapping(value = "/t-charging-order/chargingBillListR") @@ -66,8 +69,8 @@ * 获取用户最近使用车辆充电的车辆id * @return */ - @GetMapping(value = "/t-charging-order/getCar") - public R<Long> getCar(); + @GetMapping(value = "/t-charging-order/getCar/{id}") + public R<Long> getCar(@PathVariable("id")String id); /** @@ -137,7 +140,7 @@ */ @PutMapping(value = "/t-charging-order/stopCharging/{id}") R<String> stopCharging(@PathVariable("id") String id); - + /** * 充电支付成功回调通知 @@ -163,4 +166,16 @@ @RequestParam("out_trade_no") String refund_id, @RequestParam("out_trade_no") String tradeState, @RequestParam("out_trade_no") String success_time); + /** + * 管理后台取消购物订单后退款回调 + * @param out_refund_no + * @param refund_id + * @param tradeState + * @param success_time + */ + @PostMapping("/t-shopping-order/shoppingOrderWxRefund") + void shoppingOrderWxRefund(@RequestParam("out_trade_no") String out_refund_no, + @RequestParam("out_trade_no") String refund_id, + @RequestParam("out_trade_no") String tradeState, + @RequestParam("out_trade_no") String success_time); } diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ShoppingOrderClient.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ShoppingOrderClient.java new file mode 100644 index 0000000..94901e0 --- /dev/null +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ShoppingOrderClient.java @@ -0,0 +1,29 @@ +package com.ruoyi.order.api.feignClient; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.order.api.factory.ShoppingOrderFallbackFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @author zhibing.pu + * @Date 2024/9/29 16:23 + */ +@FeignClient(contextId = "ShoppingOrderClient", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = ShoppingOrderFallbackFactory.class) +public interface ShoppingOrderClient { + + + /** + * 商城订单去掉退款回调通知 + * @param out_refund_no + * @param refund_id + * @param tradeState + * @param success_time + */ + @PostMapping("/t-shopping-order/cancelShoppingOrderWxRefund") + void cancelShoppingOrderWxRefund(@RequestParam("out_refund_no") String out_refund_no, + @RequestParam("refund_id") String refund_id, + @RequestParam("tradeState") String tradeState, + @RequestParam("success_time") String success_time); +} diff --git a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java index 5eef671..133959d 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java +++ b/ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderInvoice.java @@ -112,6 +112,7 @@ @ApiModelProperty(value = "添加时间") @TableField("create_time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty(value = "开票时间") diff --git a/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index afa46fb..108adca 100644 --- a/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-api/ruoyi-api-order/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -3,4 +3,5 @@ com.ruoyi.order.api.factory.ExchangeOrderFallbackFactory com.ruoyi.order.api.factory.ChargingOrderAccountingStrategyFallbackFactory com.ruoyi.order.api.factory.AccountingStrategyDetailOrderFallbackFactory -com.ruoyi.order.api.factory.AccountingStrategyOrderFallbackFactory \ No newline at end of file +com.ruoyi.order.api.factory.AccountingStrategyOrderFallbackFactory +com.ruoyi.order.api.factory.ShoppingOrderFallbackFactory \ No newline at end of file diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java index 7bc1399..0e50de9 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/TEvaluationTagFallbackFactory.java @@ -30,7 +30,12 @@ public R<List<TEvaluationTagVO>> getTagList(Integer type) { return R.fail("获取标签列表:" + throwable.getMessage()); } - + + @Override + public R<List<TEvaluationTagVO>> getList() { + return R.fail("获取标签列表失败:" + throwable.getMessage()); + } + @Override public R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds) { return R.fail("根据id集合获取数据失败:" + throwable.getMessage()); diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java index 8fe1f2c..7b18ebf 100644 --- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java +++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java @@ -27,7 +27,13 @@ */ @PostMapping("/t-evaluation-tag/getTagList") R<List<TEvaluationTagVO>> getTagList(Integer type); - + /** + * 获取标签列表 + * @return + */ + @PostMapping("/t-evaluation-tag/getList") + R<List<TEvaluationTagVO>> getList(); + /** * 根据id集合获取数据 diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLoginLog.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLoginLog.java index 1c74644..326c448 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLoginLog.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLoginLog.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -66,6 +67,7 @@ @TableField("login_time") @ApiModelProperty(value = "登录时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime loginTime; /** * 登录状态(1=成功,2=失败) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java index e7d3e70..cc7712c 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysLoginLogClient.java @@ -21,6 +21,6 @@ * @param loginLog * @return */ - @PostMapping("/saveLoginLog") + @PostMapping("/sysLoginLog/saveLoginLog") R saveLoginLog(@RequestBody SysLoginLog loginLog); } diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml index 17035c7..6be75c3 100644 --- a/ruoyi-auth/pom.xml +++ b/ruoyi-auth/pom.xml @@ -89,6 +89,10 @@ <artifactId>hutool-crypto</artifactId> <version>${hutool.version}</version> </dependency> + <dependency> + <groupId>com.ruoyi</groupId> + <artifactId>ruoyi-api-chargingPile</artifactId> + </dependency> </dependencies> diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 1cc1d79..da2ac38 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -3,6 +3,8 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import com.ruoyi.chargingPile.api.feignClient.PartnerClient; +import com.ruoyi.chargingPile.api.model.Partner; import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; @@ -40,6 +42,12 @@ @Resource private SysUserClient userClient; + @Resource + private PartnerClient partnerClient; + + + + @PostMapping("login") @GlobalTransactional(rollbackFor = Exception.class)//分布式事务 @@ -55,6 +63,10 @@ map.put("roleName",roles.get(0).getRoleName()); map.put("info", userInfo); + if(userInfo.getSysUser().getRoleType() == 2){ + Partner partner = partnerClient.getPartnerById(userInfo.getSysUser().getObjectId()).getData(); + map.put("partnerName", partner.getName()); + } // 修改用户最后登录时间 SysUser sysUser = new SysUser(); sysUser.setUserId(userInfo.getSysUser().getUserId()); diff --git a/ruoyi-auth/src/main/resources/bootstrap.yml b/ruoyi-auth/src/main/resources/bootstrap.yml index 0122628..20ccecd 100644 --- a/ruoyi-auth/src/main/resources/bootstrap.yml +++ b/ruoyi-auth/src/main/resources/bootstrap.yml @@ -6,7 +6,8 @@ spring: profiles: # 环境配置 - active: dev +# active: dev + active: prod application: # 应用名称 name: ruoyi-auth @@ -55,52 +56,52 @@ type: nacos nacos: # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - data-id: seata-server.properties - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + data-id: seata-server.properties + username: nacos + password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + username: nacos + password: nacos cloud: nacos: discovery: # 开发环境 - server-addr: 192.168.110.169:8848 # nacos注册中心地址 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 - group: DEFAULT_GROUP - application: seata-server #Nacos 中 Seata 名称 - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + application: seata-server #Nacos 中 Seata 名称 + username: nacos + password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java index ca886c7..1598576 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java @@ -60,12 +60,12 @@ /** * 登录成功状态 */ - public static final String LOGIN_SUCCESS_STATUS = "0"; + public static final String LOGIN_SUCCESS_STATUS = "1"; /** * 登录失败状态 */ - public static final String LOGIN_FAIL_STATUS = "1"; + public static final String LOGIN_FAIL_STATUS = "2"; /** * 登录成功 diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/FileUploadUtils.java similarity index 97% rename from ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java rename to ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/FileUploadUtils.java index 8109d34..9512737 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/FileUploadUtils.java @@ -1,4 +1,4 @@ -package com.ruoyi.file.utils; +package com.ruoyi.common.core.utils; import java.io.File; import java.io.IOException; @@ -10,8 +10,6 @@ import com.ruoyi.common.core.exception.file.FileNameLengthLimitExceededException; import com.ruoyi.common.core.exception.file.FileSizeLimitExceededException; import com.ruoyi.common.core.exception.file.InvalidExtensionException; -import com.ruoyi.common.core.utils.DateUtils; -import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.file.FileTypeUtils; import com.ruoyi.common.core.utils.file.MimeTypeUtils; import com.ruoyi.common.core.utils.uuid.Seq; diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml index 1beff53..7598ca6 100644 --- a/ruoyi-gateway/src/main/resources/bootstrap.yml +++ b/ruoyi-gateway/src/main/resources/bootstrap.yml @@ -12,7 +12,8 @@ allow-bean-definition-overriding: true profiles: # 环境配置 - active: dev +# active: dev + active: prod --- spring: config: diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java index 3247e9b..6b0606e 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java @@ -4,7 +4,7 @@ import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import com.ruoyi.file.utils.FileUploadUtils; +import com.ruoyi.common.core.utils.FileUploadUtils; /** * 本地文件存储 diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java index f53d86f..790c36b 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java @@ -6,7 +6,7 @@ import org.springframework.web.multipart.MultipartFile; import com.alibaba.nacos.common.utils.IoUtils; import com.ruoyi.file.config.MinioConfig; -import com.ruoyi.file.utils.FileUploadUtils; +import com.ruoyi.common.core.utils.FileUploadUtils; import io.minio.MinioClient; import io.minio.PutObjectArgs; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index e5cc275..3c52cfc 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -29,427 +29,389 @@ /** * 角色 业务层处理 - * + * * @author ruoyi */ @Service -public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService -{ - @Autowired - private SysRoleMapper roleMapper; - - @Autowired - private SysRoleMenuMapper roleMenuMapper; - - @Autowired - private SysUserRoleMapper userRoleMapper; - - @Autowired - private SysRoleDeptMapper roleDeptMapper; - - /** - * 根据条件分页查询角色数据 - * - * @param role 角色信息 - * @return 角色数据集合信息 - */ - @Override - @DataScope(deptAlias = "d") - public List<SysRole> selectRoleList(SysRole role) - { - return roleMapper.selectRoleList(role); - } - - /** - * 根据用户ID查询角色 - * - * @param userId 用户ID - * @return 角色列表 - */ - @Override - public List<SysRole> selectRolesByUserId(Long userId) - { - List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId); - List<SysRole> roles = selectRoleAll(); - for (SysRole role : roles) - { - for (SysRole userRole : userRoles) - { - if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) - { - role.setFlag(true); - break; - } - } - } - return roles; - } - - /** - * 根据用户ID查询权限 - * - * @param userId 用户ID - * @return 权限列表 - */ - @Override - public Set<String> selectRolePermissionByUserId(Long userId) - { - List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); - Set<String> permsSet = new HashSet<>(); - for (SysRole perm : perms) - { - if (StringUtils.isNotNull(perm)) - { - permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); - } - } - return permsSet; - } - - /** - * 查询所有角色 - * - * @return 角色列表 - */ - @Override - public List<SysRole> selectRoleAll() - { - return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); - } - - /** - * 根据用户ID获取角色选择框列表 - * - * @param userId 用户ID - * @return 选中角色ID列表 - */ - @Override - public List<Long> selectRoleListByUserId(Long userId) - { - return roleMapper.selectRoleListByUserId(userId); - } - - /** - * 通过角色ID查询角色 - * - * @param roleId 角色ID - * @return 角色对象信息 - */ - @Override - public SysRole selectRoleById(Long roleId) - { - return roleMapper.selectRoleById(roleId); - } - - /** - * 校验角色名称是否唯一 - * - * @param role 角色信息 - * @return 结果 - */ - @Override - public boolean checkRoleNameUnique(SysRole role) - { - Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); - SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); - if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) - { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } - - /** - * 校验角色权限是否唯一 - * - * @param role 角色信息 - * @return 结果 - */ - @Override - public boolean checkRoleKeyUnique(SysRole role) - { - Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); - SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); - if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) - { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } - - /** - * 校验角色是否允许操作 - * - * @param role 角色信息 - */ - @Override - public void checkRoleAllowed(SysRole role) - { - if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) - { - throw new ServiceException("不允许操作超级管理员角色"); - } - } - - /** - * 校验角色是否有数据权限 - * - * @param roleId 角色id - */ - @Override - public void checkRoleDataScope(Long roleId) - { - if (!SysUser.isAdmin(SecurityUtils.getUserId())) - { - SysRole role = new SysRole(); - role.setRoleId(roleId); - List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role); - if (StringUtils.isEmpty(roles)) - { - throw new ServiceException("没有权限访问角色数据!"); - } - } - } - - /** - * 通过角色ID查询角色使用数量 - * - * @param roleId 角色ID - * @return 结果 - */ - @Override - public int countUserRoleByRoleId(Long roleId) - { - return userRoleMapper.countUserRoleByRoleId(roleId); - } - - /** - * 新增保存角色信息 - * - * @param role 角色信息 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int insertRole(SysRole role) - { - // 新增角色信息 - roleMapper.insertRole(role); - return insertRoleMenu(role); - } - - /** - * 修改保存角色信息 - * - * @param role 角色信息 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int updateRole(SysRole role) - { - // 修改角色信息 +public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService { + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * @return 角色数据集合信息 + */ + @Override + @DataScope(deptAlias = "d") + public List<SysRole> selectRoleList(SysRole role) { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * @return 角色列表 + */ + @Override + public List<SysRole> selectRolesByUserId(Long userId) { + List<SysRole> userRoles = roleMapper.selectRolePermissionByUserId(userId); + List<SysRole> roles = selectRoleAll(); + for (SysRole role : roles) { + for (SysRole userRole : userRoles) { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * @return 权限列表 + */ + @Override + public Set<String> selectRolePermissionByUserId(Long userId) { + List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId); + Set<String> permsSet = new HashSet<>(); + for (SysRole perm : perms) { + if (StringUtils.isNotNull(perm)) { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + public List<SysRole> selectRoleAll() { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * @return 选中角色ID列表 + */ + @Override + public List<Long> selectRoleListByUserId(Long userId) { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById(Long roleId) { + return roleMapper.selectRoleById(roleId); + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public boolean checkRoleNameUnique(SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public boolean checkRoleKeyUnique(SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed(SysRole role) { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { + throw new ServiceException("不允许操作超级管理员角色"); + } + } + + /** + * 校验角色是否有数据权限 + * + * @param roleId 角色id + */ + @Override + public void checkRoleDataScope(Long roleId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List<SysRole> roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) { + throw new ServiceException("没有权限访问角色数据!"); + } + } + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + public int countUserRoleByRoleId(Long roleId) { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertRole(SysRole role) { + // 新增角色信息 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateRole(SysRole role) { + // 修改角色信息 // roleMapper.updateRole(role); - // 删除角色与菜单关联 + // 删除角色与菜单关联 // roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); - return roleMapper.updateRole(role); - } - - /** - * 修改角色状态 - * - * @param role 角色信息 - * @return 结果 - */ - @Override - public int updateRoleStatus(SysRole role) - { - return roleMapper.updateRole(role); - } - - /** - * 修改数据权限信息 - * - * @param role 角色信息 - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int authDataScope(SysRole role) - { - // 修改角色信息 - roleMapper.updateRole(role); - // 删除角色与部门关联 - roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); - // 新增角色和部门信息(数据权限) - return insertRoleDept(role); - } - - /** - * 新增角色菜单信息 - * - * @param role 角色对象 - */ - public int insertRoleMenu(SysRole role) - { - int rows = 1; - // 新增用户与角色管理 - List<SysRoleMenu> list = new ArrayList<SysRoleMenu>(); - Long[] menuIds = role.getMenuIds(); + return roleMapper.updateRole(role); + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + public int updateRoleStatus(SysRole role) { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int authDataScope(SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + */ + public int insertRoleMenu(SysRole role) { + int rows = 1; + // 新增用户与角色管理 + List<SysRoleMenu> list = new ArrayList<SysRoleMenu>(); + Long[] menuIds = role.getMenuIds(); // List<Long> longs = Arrays.asList(menuIds); - List<Long> longs = new ArrayList<>(); - for (Long menuId : menuIds) { - longs.add(menuId); - } - if(!longs.contains(1061L)){ - longs.add(1061L); - longs.add(1062L); - longs.add(1065L); - longs.add(1073L); - longs.add(1161L); - longs.add(1203L); - } - - for (Long menuId : longs) - { - SysRoleMenu rm = new SysRoleMenu(); - rm.setRoleId(role.getRoleId()); - rm.setMenuId(menuId); - list.add(rm); - } - if (list.size() > 0) - { - rows = roleMenuMapper.batchRoleMenu(list); - } - return rows; - } - - /** - * 新增角色部门信息(数据权限) - * - * @param role 角色对象 - */ - public int insertRoleDept(SysRole role) - { - int rows = 1; - // 新增角色与部门(数据权限)管理 - List<SysRoleDept> list = new ArrayList<SysRoleDept>(); - for (Long deptId : role.getDeptIds()) - { - SysRoleDept rd = new SysRoleDept(); - rd.setRoleId(role.getRoleId()); - rd.setDeptId(deptId); - list.add(rd); - } - if (list.size() > 0) - { - rows = roleDeptMapper.batchRoleDept(list); - } - return rows; - } - - /** - * 通过角色ID删除角色 - * - * @param roleId 角色ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int deleteRoleById(Long roleId) - { - // 删除角色与菜单关联 - roleMenuMapper.deleteRoleMenuByRoleId(roleId); - // 删除角色与部门关联 - roleDeptMapper.deleteRoleDeptByRoleId(roleId); - return roleMapper.deleteRoleById(roleId); - } - - /** - * 批量删除角色信息 - * - * @param roleIds 需要删除的角色ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int deleteRoleByIds(Long[] roleIds) { - for (Long roleId : roleIds) - { - checkRoleAllowed(new SysRole(roleId)); - checkRoleDataScope(roleId); - SysRole role = selectRoleById(roleId); - if (countUserRoleByRoleId(roleId) > 0) - { - throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); - } - } - // 删除角色与菜单关联 - roleMenuMapper.deleteRoleMenu(roleIds); - // 删除角色与部门关联 - roleDeptMapper.deleteRoleDept(roleIds); - return roleMapper.deleteRoleByIds(roleIds); - } - - /** - * 取消授权用户角色 - * - * @param userRole 用户和角色关联信息 - * @return 结果 - */ - @Override - public int deleteAuthUser(SysUserRole userRole) - { - return userRoleMapper.deleteUserRoleInfo(userRole); - } - - /** - * 批量取消授权用户角色 - * - * @param roleId 角色ID - * @param userIds 需要取消授权的用户数据ID - * @return 结果 - */ - @Override - public int deleteAuthUsers(Long roleId, Long[] userIds) - { - return userRoleMapper.deleteUserRoleInfos(roleId, userIds); - } - - /** - * 批量选择授权用户角色 - * - * @param roleId 角色ID - * @param userIds 需要授权的用户数据ID - * @return 结果 - */ - @Override - public int insertAuthUsers(Long roleId, Long[] userIds) - { - // 新增用户与角色管理 - List<SysUserRole> list = new ArrayList<SysUserRole>(); - for (Long userId : userIds) - { - SysUserRole ur = new SysUserRole(); - ur.setUserId(userId); - ur.setRoleId(roleId); - list.add(ur); - } - return userRoleMapper.batchUserRole(list); - } - - @Override - public List<SysRole> isExitUpdate(String roleName, Long roleId,Integer companyId) { - return roleMapper.isExitUpdate(roleName,roleId,companyId); - } - - /** - * 根据id获取数据 - * @param ids 数据id集合 - * @return - */ - @Override - public List<SysRole> getSysRoleByIds(List<Integer> ids) { - return this.baseMapper.getSysRoleByIds(ids); - } + List<Long> longs = new ArrayList<>(); + for (Long menuId : menuIds) { + longs.add(menuId); + } + if (!longs.contains(1061L)) { + longs.add(1061L); + longs.add(1062L); + longs.add(1065L); + longs.add(1073L); + longs.add(1161L); + longs.add(1203L); + } + + for (Long menuId : longs) { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + */ + public int insertRoleDept(SysRole role) { + int rows = 1; + // 新增角色与部门(数据权限)管理 + List<SysRoleDept> list = new ArrayList<SysRoleDept>(); + for (Long deptId : role.getDeptIds()) { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteRoleById(Long roleId) { + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteRoleByIds(Long[] roleIds) { + for (Long roleId : roleIds) { + checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenu(roleIds); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * @return 结果 + */ + @Override + public int deleteAuthUser(SysUserRole userRole) { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * @return 结果 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要授权的用户数据ID + * @return 结果 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) { + // 新增用户与角色管理 + List<SysUserRole> list = new ArrayList<SysUserRole>(); + for (Long userId : userIds) { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } + + @Override + public List<SysRole> isExitUpdate(String roleName, Long roleId, Integer companyId) { + return roleMapper.isExitUpdate(roleName, roleId, companyId); + } + + /** + * 根据id获取数据 + * + * @param ids 数据id集合 + * @return + */ + @Override + public List<SysRole> getSysRoleByIds(List<Integer> ids) { + return this.baseMapper.getSysRoleByIds(ids); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml index d837d2b..c8f030b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml @@ -11,7 +11,8 @@ allow-bean-definition-overriding: true profiles: # 环境配置 - active: dev +# active: dev + active: prod --- spring: config: @@ -54,52 +55,52 @@ type: nacos nacos: # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - data-id: seata-server.properties - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + data-id: seata-server.properties + username: nacos + password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + username: nacos + password: nacos cloud: nacos: discovery: # 开发环境 - server-addr: 192.168.110.169:8848 # nacos注册中心地址 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 - group: DEFAULT_GROUP - application: seata-server #Nacos 中 Seata 名称 - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + application: seata-server #Nacos 中 Seata 名称 + username: nacos + password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 50315be..47651b2 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -160,6 +160,7 @@ select user_id AS userId, nick_name AS nickName, + user_name AS userName, create_time AS createTime, remark AS remark from sys_user @@ -168,6 +169,7 @@ AND nick_name LIKE concat('%',#{query.nickName},'%') </if> AND del_flag = '0' + AND roleType = 1 </where> ORDER BY create_time DESC </select> diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java index 0678b48..d86465b 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java @@ -113,7 +113,7 @@ String plainData = null; if (isDataEncrypted) { try { - plainData = AlipayEncrypt.decryptContent(content, encryptType, "XABBSOeWDakvuG9TDez4Qg====", charset); + plainData = AlipayEncrypt.decryptContent(content, encryptType, "84iAz9sTR7siFxTmAD6sfw==", charset); } catch (AlipayApiException e) { //解密异常, 记录日志 throw new ServiceException("解密异常"); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AlipayOpenAppQrcodeCreate.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AlipayOpenAppQrcodeCreate.java new file mode 100644 index 0000000..ba26098 --- /dev/null +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AlipayOpenAppQrcodeCreate.java @@ -0,0 +1,59 @@ +package com.ruoyi.account.controller; + +import com.alibaba.fastjson.JSONObject; +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.response.AlipayOpenAppQrcodeCreateResponse; +import com.alipay.api.request.AlipayOpenAppQrcodeCreateRequest; +import com.alipay.api.domain.AlipayOpenAppQrcodeCreateModel; + +import com.alipay.api.FileItem; +import java.util.Base64; +import java.util.ArrayList; +import java.util.List; + +/** + * 生成支付宝小程序二维码 + */ +public class AlipayOpenAppQrcodeCreate { + + public static void main(String[] args) throws AlipayApiException { + // 初始化SDK + AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig()); + // 构造请求参数以调用接口 + AlipayOpenAppQrcodeCreateRequest request = new AlipayOpenAppQrcodeCreateRequest(); + AlipayOpenAppQrcodeCreateModel model = new AlipayOpenAppQrcodeCreateModel(); + // 设置跳转小程序的页面路径 + model.setUrlParam("pages/index/index"); + // 设置小程序的启动参数 + model.setQueryParam("x=1"); + // 设置码描述 + model.setDescribe("二维码描述"); + request.setBizModel(model); + AlipayOpenAppQrcodeCreateResponse response = alipayClient.execute(request); + System.out.println(response.getBody()); + String qrCodeUrl = response.getQrCodeUrl(); + System.err.println(qrCodeUrl); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + } + } + + private static AlipayConfig getAlipayConfig() { + String privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCdf1zyOndfbhI67zoFtjuVMYMJkr1UHBOpX1kWe4z8uqo5F7ESpJzsUNRcV/Mgz4QPOYGMV6C5KsT6QH2in5XDumIlY3FVFLOeXrVczJSTJdeY+00Ky9MMB5/Hsg/0GqdBvbDMxY/A6EQ1jH7BnV5wpq8gsNDTJLRKfTpnh0jyjH4nNormnLNgah9SBdxTOccWqP3VblpuqLNMYCIvoF5ukD3Z/GCIQ4FUTMwzdXW69uVEzCTucwxsylHmj3lE8Th4Lf4Nr4+oq2LfkNoHv1ygDluKA2oy5AaUg/pfEEeQYSzAJXc23AAdEgj5oS2eIkbthuC70Ns8clTgVfiWj5mvAgMBAAECggEBAJHvj/pLPo1Ies/tF0BvqSoHJLpcI96p3XYViYERnoQXmt8oGsWBjn5SL1QZkokWf/FzgZy/HYg2HysbUs67PJSOQZ8PU9ZYRk86xqZkUk8+w1VXlf2o+7er4NuzHKE9iTmbQRWdAiTnkzxjIJja7sVHTgLmk7jxy7Ux8Eo5ytgi7M7eFjr/jOErHikEImdiM77T1SDD7rbEtXhocr6vyAMgI02/ZEAO4w9Cui+fqrDWUouMeHzgRZxJ1Mp1GGlsZ5X3P3Fd6oGyznvsuqS6h803O+zdg+0GdtmudjVHuHi/clOpMI3YB9JfBZPli5lCMSO2yrr+zRnvXBQM94MfaQECgYEA2rqA1G1sKbWakH1N3ZKH4Jferat/sKc5KDa9ws1vyIwGA1emwG7zuettaAlQBbzXUmOC8O0m/a5vyu029p9BuWpi2upeo8SX66Cm8RenjOJ/giaPmIYtbFC5PwSeIFk3rLQK6gsMQAsiYvul/5ZySus1+7YOFPq/y5J4pGNqwO8CgYEAuFXOfN/gIPsiy3FuKiAcC72QLe4dtk4WE96UADKZ6jpcIfuf2szNFJbbn/MZS4iWJ4QmPQMw4aRhDGxzVcpZkYrNFDZBarMTfYYlD8ZYOXhf7JG+IRqSWTVK/3Zpspdwi90CKKPlcglboOMl4vRHiR2tB7ff1A47EIcvRlJLM0ECgYEArSbhn8jzzF0IfAPGJXa/fCudy2wtjIIE/HHBbTpGmMNIa1LzHfl3liHqnWZp4/DnoEBIw0NqD38M3t9FGJ1gYVD36weIXirefVjTb55jNGOFv1mZaYwm301UKLAWIdOfAGgTD84pJ3XpBeTjN185IVfsh1RK9469UIGmYbSWKR8CgYEAozWGD9aAsXLqCcsyySWI73Q1thUARau5rHoD/HDRCiwF6yjJDocKhVJUvrgVC2Wx3OcKnDa5Du/l5YQYUjtJNq34ig7HuNs5RIiDRAZPkwLbm7Am8VR/g3DGKI4FY9TmF0/lW2pR+rgCYt77aojy1Zpq20yYZz76WNX4q4CtiIECgYBxaN8iMXuKkGigDq+DWiw3RSt9XalqJEWdLKXLJZto1ESN+KC6ZQaCM+j9L+2A4n2N10UjjABdvcztK7EFw5LFI5nDEFEQu7VUfi2eKIS2hUKm2QGQPxeCbNd5mUL4kXsmetKHcZnxZlG1CBinWXCUbJAIRbl9Cc4ax85evX+ChA=="; + String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkoPidM7vHL/74FhOWARjkMDZN0GktpVEQaYz6qpIjTuKLcQsR74CUv9LoiGD9uquYAI52TdmxzMWbuMEvrdVIT6pWyJuCvScX2U5Zwn9Bk8bE5RmTobUrU3LFudMYIGFU3qUHqnTJFQxLsSUibTtxbov1bpCQNwk3/2RdYOpJHKDjkXzNcjJrkuNcGcuzNW/3+L5CMaVm0dxqxx0dhJ4H0xvpMw2uvdxdLXN/KoYszfps4j61x0KFwkulvD1WHzR1f/ot9NU8FZe+dkNm5cXb9HbwQIbfARyB5bd0EYHSr4fJIUJx1GnjpfT6/traxEoyOcI6diJa4b2hZpR3WvxTQIDAQAB"; + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do"); + alipayConfig.setAppId("2021004173610331"); + alipayConfig.setPrivateKey(privateKey); + alipayConfig.setFormat("json"); + alipayConfig.setAlipayPublicKey(alipayPublicKey); + alipayConfig.setCharset("UTF-8"); + alipayConfig.setSignType("RSA2"); + return alipayConfig; + } +} \ No newline at end of file diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java index e17f179..a0d19f9 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java @@ -39,10 +39,7 @@ import java.math.BigDecimal; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -116,7 +113,7 @@ List<TAppUserCar> cars = appUserCarService.list(new QueryWrapper<TAppUserCar>() .eq("app_user_id",tokenService.getLoginUserApplet().getUserId()) .orderByDesc("create_time")); - Long data1 = chargingOrderClient.getCar().getData(); + Long data1 = chargingOrderClient.getCar(tokenService.getLoginUserApplet().getUserId().toString()).getData(); Integer data2 = otherClient.getAddCarIntegral().getData(); data.setIntegral(data2); if (!cars.isEmpty()){ @@ -212,8 +209,12 @@ @ApiOperation(value = "优惠卷可用数量", tags = {"小程序-站点管理-站点详情"}) @GetMapping(value = "/couponCount") public R<Long> couponCount() { - LocalDateTime now = LocalDateTime.now(); - return R.ok(tAppCouponService.lambdaQuery().le(TAppCoupon::getStartTime, now).ge(TAppCoupon::getEndTime, now).eq(TAppCoupon::getStatus, 1).count()); + Long userId = tokenService.getLoginUserApplet().getUserId(); + Long count = tAppCouponService.lambdaQuery().eq(TAppCoupon::getAppUserId, userId).ge(TAppCoupon::getEndTime, LocalDateTime.now()).eq(TAppCoupon::getStatus, 1).count(); + if(Objects.isNull(count)){ + count = 0L; + } + return R.ok(count); } @@ -223,6 +224,7 @@ */ @PostMapping("/grantCoupon") public R grantCoupon(@RequestBody GrantCouponDto dto){ + dto.setWaysToObtain(3); List<TAppCoupon> res = new ArrayList<>(); TCoupon coupon = otherClient.getCouponById(dto.getCouponId()).getData(); @@ -246,9 +248,20 @@ break; case 2: // 根据市codes 查询用户ids - List<Long> collect1 = appUserService.list(new QueryWrapper<TAppUser>() - .in("city_code", Arrays.asList(dto.getCityCode().split(",")))) - .stream().map(TAppUser::getId).collect(Collectors.toList()); + List<Long> collect1 = new ArrayList<>(); + // 根据市codes 查询用户ids + if (StringUtils.hasLength(dto.getProvinceCode())){ + List<Long> collect2 = appUserService.list(new QueryWrapper<TAppUser>() + .in("province_code", Arrays.asList(dto.getProvinceCode().split(",")))) + .stream().map(TAppUser::getId).collect(Collectors.toList()); + collect1.addAll(collect2); + } + if (StringUtils.hasLength(dto.getCityCode())){ + List<Long> collect2 = appUserService.list(new QueryWrapper<TAppUser>() + .in("city_code", Arrays.asList(dto.getCityCode().split(",")))) + .stream().map(TAppUser::getId).collect(Collectors.toList()); + collect1.addAll(collect2); + } for (Long l : collect1) { TAppCoupon tAppCoupon = new TAppCoupon(); tAppCoupon.setAppUserId(l); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java index 741100d..2b2d386 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java @@ -125,9 +125,9 @@ @ApiOperation(tags = {"小程序-用户地址"},value = "查询用户地址详情") @GetMapping(value = "/getDetailById") public R<TAppUserAddress> getDetailById(@RequestParam(value = "id")Long id) { - TAppUserAddress byId = appUserAddressService.getById(id); - byId.setUid(byId.getId().toString()); - return R.ok(byId); + TAppUserAddress appUserAddress = appUserAddressService.getById(id); + appUserAddress.setUid(appUserAddress.getId().toString()); + return R.ok(appUserAddress); } /** diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java index 1374035..9293ee1 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java @@ -351,7 +351,6 @@ Page<TAppUser> page = appUserService.lambdaQuery() .like(userListQueryDto.getUserPhone() != null && !"".equals(userListQueryDto.getUserPhone()), TAppUser::getPhone, userListQueryDto.getUserPhone()) .eq(userListQueryDto.getCityCode() != null && !"".equals(userListQueryDto.getCityCode()), TAppUser::getCityCode, userListQueryDto.getCityCode()) - .eq(userListQueryDto.getProvinceCode() != null && !"".equals(userListQueryDto.getProvinceCode()), TAppUser::getProvinceCode, userListQueryDto.getProvinceCode()) .in(!userIds.isEmpty(),TAppUser::getId,userIds) .eq(TAppUser::getStatus,1) .page(Page.of(userListQueryDto.getPageCurr(), userListQueryDto.getPageSize())); @@ -570,7 +569,9 @@ TAppUser byId = appUserService.getById(userId); AppUserInfoDto appUserInfoDto = new AppUserInfoDto(); TVip data = vipClient.getVipInfoByType(2).getData(); - appUserInfoDto.setMinPrice(data.getMonthlyCard()); + if(null != data){ + appUserInfoDto.setMinPrice(data.getMonthlyCard()); + } //判断会员 if (byId.getVipEndTime()==null||byId.getVipEndTime().isBefore(LocalDateTime.now())){ diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java index 3383c94..f501947 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TInvoiceInformationController.java @@ -39,7 +39,8 @@ @ApiOperation(value = "获取开票抬头数据列表", tags = {"小程序-充电发票"}) public AjaxResult<List<InvoiceInformationVo>> getInvoiceInformationList(){ Long userId = tokenService.getLoginUserApplet().getUserId(); - List<TInvoiceInformation> list = invoiceInformationService.list(new LambdaQueryWrapper<TInvoiceInformation>().eq(TInvoiceInformation::getAppUserId, userId).eq(TInvoiceInformation::getDelFlag, 0)); + List<TInvoiceInformation> list = invoiceInformationService.list(new LambdaQueryWrapper<TInvoiceInformation>() + .eq(TInvoiceInformation::getAppUserId, userId).eq(TInvoiceInformation::getDelFlag, 0).orderByDesc(TInvoiceInformation::getIsDefault)); List<InvoiceInformationVo> lists = new ArrayList<>(); for (TInvoiceInformation tInvoiceInformation : list) { InvoiceInformationVo vo = new InvoiceInformationVo(); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java index de9af48..a743b4a 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/WxLoginController.java @@ -1,6 +1,7 @@ package com.ruoyi.account.controller; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.internal.util.codec.Base64; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; @@ -15,6 +16,7 @@ import com.ruoyi.account.wx.tools.WxAppletTools; import com.ruoyi.account.wx.tools.WxUtils; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.FileUploadUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.redis.service.RedisService; @@ -24,12 +26,25 @@ import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +//import org.springframework.mock.web.MockMultipartFile; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.SecureRandom; +import java.text.SimpleDateFormat; +import java.util.*; + /** * <p> * 微信小程序登录 前端控制器 @@ -48,6 +63,11 @@ private WeixinProperties wxConfig; @Autowired private RestTemplate wxRestTemplate; +// /** +// * 上传文件存储在本地的根路径 +// */ +// @Value("${file.path}") +// private String localFilePath; @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"微信小程序登录"}) @PostMapping("/openIdByJsCode") public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserEncrypteData data) { @@ -79,4 +99,62 @@ public AjaxResult<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserDecodeData appletUserDecodeData) { return AjaxResult.success(appUserService.wxLogin(appletUserDecodeData, null)); } +// public static MultipartFile convertInputStreamToMultipartFile(InputStream inputStream, String fileName, String contentType) throws IOException { +// return new MockMultipartFile(fileName, fileName, contentType, inputStream); +// } + @ApiOperation(value = "获取微信小程序二维码",tags = {"获取微信小程序二维码"}) + @PostMapping("/getQRCode") + public AjaxResult getQRCode() { + InputStream inputStream = null; + OutputStream outputStream = null; + WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig); + String accessToken = appletTools.getAccessToken(""); + try { + String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken; + Map<String, Object> param = new HashMap<>(); +// param.put("page", "pageA/houseDetail"); + param.put("check_path", false); + param.put("env_version", "trial"); + param.put("width", 200); //二维码尺寸 + param.put("is_hyaline", true); // 是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码 参数仅对小程序码生效 + param.put("auto_color", true); // 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 参数仅对小程序码生效 + Map<String, Object> line_color = new HashMap<>(); + line_color.put("r", 0); + line_color.put("g", 0); + line_color.put("b", 0); + param.put("line_color", line_color); + System.err.println("调用生成微信URL接口传参:" + param); + MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); + HttpEntity requestEntity = new HttpEntity(param, headers); + ResponseEntity<byte[]> entity = wxRestTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); + System.err.println("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody()); + byte[] result = entity.getBody(); + System.err.println(Base64.encodeBase64String(result)); + inputStream = new ByteArrayInputStream(result); + String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpeg"; +// MultipartFile multipartFile = convertInputStreamToMultipartFile(inputStream, finalFileName, "image/jpeg"); +// String name = FileUploadUtils.upload(localFilePath, multipartFile); +// System.err.println(name); + return AjaxResult.success(null); + } catch (Exception e) { + System.err.println("调用小程序生成微信永久小程序码URL接口异常" + e); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return AjaxResult.success(); + } + } diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java index 68fa2ca..0181d72 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/filter/AuthFilter.java @@ -44,6 +44,11 @@ @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; @@ -83,9 +88,13 @@ } filterChain.doFilter(request, response); } - - - + + @Override + public void destroy() { + + } + + private void unauthorizedResponse(HttpServletResponse response, String msg) { response.setStatus(HttpStatus.OK.value()); response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java index 7cb8518..f4d78d6 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TAppCouponServiceImpl.java @@ -83,7 +83,7 @@ if(collect.isEmpty()){ collect.add(-1L); } - wrapper.in("id",collect); + wrapper.in("app_user_id",collect); } if (dto.getStatus()!=null){ wrapper.eq("status",dto.getStatus()); diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxAppletTools.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxAppletTools.java index 2dd2f67..6f19eea 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxAppletTools.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/wx/tools/WxAppletTools.java @@ -5,6 +5,7 @@ import com.ruoyi.account.wx.body.resq.Code2SessionResqBody; import com.ruoyi.account.wx.model.WeixinProperties; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.client.RestTemplate; diff --git a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml index 4631e31..32d84d4 100644 --- a/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-account/src/main/resources/bootstrap.yml @@ -12,7 +12,8 @@ allow-circular-references: true profiles: # 环境配置 - active: dev +# active: dev + active: prod --- spring: config: @@ -55,52 +56,52 @@ type: nacos nacos: # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - data-id: seata-server.properties - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + data-id: seata-server.properties + username: nacos + password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + username: nacos + password: nacos cloud: nacos: discovery: # 开发环境 - server-addr: 192.168.110.169:8848 # nacos注册中心地址 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 - group: DEFAULT_GROUP - application: seata-server #Nacos 中 Seata 名称 - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + application: seata-server #Nacos 中 Seata 名称 + username: nacos + password: nacos sentinel: transport: dashboard: 192.168.0.137:8080 # Sentinel控制台地址 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java index 46ae69f..9739d0d 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/PartnerController.java @@ -148,4 +148,14 @@ } + /** + * 根据id获取合作商信息 + * @param id + * @return + */ + @PostMapping("/getPartnerById/{id}") + public R<Partner> getPartnerById(@PathVariable("id") Integer id){ + Partner partner = partnerService.getPartner(id); + return R.ok(partner); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java index 1add52d..11e7230 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java @@ -164,6 +164,8 @@ PageInfo<GetSiteListDTO> list = siteService.getSiteList(siteList); return AjaxResult.success(list); } + + @GetMapping("/getSiteList/byUserId") @ApiOperation(value = "获取站点列表", tags = {"管理后台-站点管理"}) public R<List<GetSiteListDTO>> getSiteListByUserId(@RequestParam("userId") Long userId){ @@ -282,7 +284,7 @@ return AjaxResult.success(siteService.getSiteListGun()); } - @PostMapping("/getSiteListParkLot") + @GetMapping("/getSiteListParkLot") @ApiOperation(value = "获取站点列表不分页", tags = {"管理后台-停车场绑定"}) public AjaxResult<List<Site>> getSiteListParkLot(){ return AjaxResult.success(siteService.getSiteListParkLot()); @@ -302,15 +304,15 @@ @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理-站点详情"}) @PostMapping("/getDetailById") public AjaxResult<SiteDetailVO> getDetailById(@Validated @RequestBody SiteDetailQuery query){ - SiteDetailVO siteDetailVO = siteService.getDetailById(query.getSiteId()); + SiteDetailVO siteDetailVO = siteService.getDetailById(query); // 查询合作商名称 Partner partner = partnerService.getById(siteDetailVO.getPartnerId()); if(Objects.nonNull(partner)){ siteDetailVO.setPartnerName(partner.getName()); } // 计算距离 - Map<String, Double> distance = GeodesyUtil.getDistance(query.getLat() + "," + query.getLon(), siteDetailVO.getLat() + "," + siteDetailVO.getLon()); - siteDetailVO.setDistance(distance.get("WGS84")); +// Map<String, Double> distance = GeodesyUtil.getDistance(query.getLat() + "," + query.getLon(), siteDetailVO.getLat() + "," + siteDetailVO.getLon()); +// siteDetailVO.setDistance(distance.get("WGS84")); // 查询绑定车牌提示文案 TParkingLot parkingLot = parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class) .eq(TParkingLot::getSiteId, query.getSiteId())); @@ -424,7 +426,7 @@ @ResponseBody @PostMapping("/getSiteByIds") public R<List<Site>> getSiteByIds(@RequestBody List<Integer> ids){ - List<Site> sites = siteService.listByIds(ids); + List<Site> sites = siteService.list(new LambdaQueryWrapper<Site>().in(Site::getId, ids).eq(Site::getDelFlag, 0)); return R.ok(sites); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java index 1316ac6..0e418d1 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyController.java @@ -155,8 +155,8 @@ Long userId = SecurityUtils.getLoginUser().getUserid(); dto.setUserId(userId); dto.setAuditStatus(1); - dto.setId(null); dto.setParentId(dto.getId()); + dto.setId(null); accountingStrategyService.save(dto); // 添加明细 List<TAccountingStrategyDetail> accountingStrategyDetails = dto.getAccountingStrategyDetails(); @@ -223,6 +223,10 @@ String twoUserName = sysUserClient.getSysUser(children.getTwoUserId()).getData().getNickName(); accountingStrategyVO.setTwoUserName(twoUserName); } + if(null != children.getUserId()){ + String userName = sysUserClient.getSysUser(children.getUserId()).getData().getNickName(); + accountingStrategyVO.setUserName(userName); + } accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) .eq(TAccountingStrategyDetail::getAccountingStrategyId, children.getId()))); }else { @@ -237,6 +241,10 @@ String twoUserName = sysUserClient.getSysUser(accountingStrategy.getTwoUserId()).getData().getNickName(); accountingStrategyVO.setTwoUserName(twoUserName); } + if(null != children.getUserId()){ + String userName = sysUserClient.getSysUser(children.getUserId()).getData().getNickName(); + accountingStrategyVO.setUserName(userName); + } accountingStrategyVO.setAccountingStrategyDetailList(accountingStrategyDetailService.list(Wrappers.lambdaQuery(TAccountingStrategyDetail.class) .eq(TAccountingStrategyDetail::getAccountingStrategyId, id))); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java index b87e9de..d7272a4 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TAccountingStrategyDetailController.java @@ -75,6 +75,15 @@ } /** + * 通过站点id查询当前时间段计费策略展示 + */ + @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "通过枪id查询当前时间段计费策略展示") + @GetMapping(value = "/queryStrategyByGunIdAndTime") + public AjaxResult<List<TAccountingStrategyDetailVO>> queryStrategyByGunIdAndTime(@RequestParam("gunId") Integer gunId) { + return AjaxResult.ok(accountingStrategyDetailService.queryStrategyByGunIdAndTime(gunId)); + } + + /** * 价格说明金额返回,会员开通金额说明 */ @ApiOperation(tags = {"小程序-站点管理-站点详情"},value = "价格说明金额返回,会员开通金额说明") diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java index 76886af..6855288 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java @@ -39,10 +39,7 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.FileReader; -import java.io.PrintWriter; +import java.io.*; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; @@ -143,8 +140,10 @@ @ApiOperation(tags = {"后台-充电枪"},value = "结束充电") @PutMapping(value = "/stopCharging") public AjaxResult<String> stopCharging(@RequestParam("id") String id) { + // 根据充电枪id 查询最新的一笔订单 + String data = chargingOrderClient.queryOrderByGunId(id).getData(); // 硬件 结束充电 - chargingOrderClient.stopCharging(id); + chargingOrderClient.stopCharging(data); return AjaxResult.success(); } @@ -162,7 +161,7 @@ response.setContentType("application/force-download"); response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); String url = "https://mxcd.zhinenganguan.com?No=" + code; - String filePath = fileUploadConfig.getLocation(); + String filePath = fileUploadConfig.getLocation() + fileName; QRCodeUtils.encode(url, filePath); FileInputStream inputStream = new FileInputStream(filePath); ServletOutputStream out = response.getOutputStream(); @@ -174,6 +173,17 @@ out.flush(); out.close(); inputStream.close(); + + //清楚服务器上的文件 + Process process = null; + try { + process = Runtime.getRuntime().exec("sudo rm -rf " + filePath); + } catch (IOException e) { + throw new RuntimeException(e); + } + if (process != null) { + process.destroy(); + } }catch (Exception e){ e.printStackTrace(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java index 9a7ab8d..435801d 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java @@ -4,6 +4,7 @@ import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; +import com.ruoyi.chargingPile.api.query.SiteDetailQuery; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; @@ -41,7 +42,7 @@ * @param siteId * @return */ - SiteDetailVO getDetailById(@Param("siteId")Integer siteId); + SiteDetailVO getDetailById(@Param("query") SiteDetailQuery query); /** * 获取站点列表不分页 管理后台-停车场绑定 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java index 15cf0c5..367d6da 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java @@ -4,6 +4,7 @@ import com.ruoyi.chargingPile.api.dto.GetSiteListDTO; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.query.GetSiteList; +import com.ruoyi.chargingPile.api.query.SiteDetailQuery; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; @@ -72,10 +73,10 @@ /** * 获取站点详情 - * @param siteId + * @param query * @return */ - SiteDetailVO getDetailById(Integer siteId); + SiteDetailVO getDetailById(SiteDetailQuery query); /** * 获取站点列表不分页 管理后台-停车场绑定 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java index 835a46c..e644acd 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/TAccountingStrategyDetailService.java @@ -52,4 +52,10 @@ */ Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails); + /** + * 通过枪id查询当前时间段计费策略展示 + * @param gunId + * @return + */ + List<TAccountingStrategyDetailVO> queryStrategyByGunIdAndTime(Integer gunId); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java index 2ad2b83..5bb8860 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/PartnerServiceImpl.java @@ -94,10 +94,10 @@ List<SysRole> data = r.getData(); for (PartnerListDTO partnerListDTO : list) { Integer roleId = partnerListDTO.getRoleId(); - if(null != roleId){ + if(null == roleId){ continue; } - SysRole sysRole = data.stream().filter(s -> roleId.equals(s.getRoleId())).findFirst().get(); + SysRole sysRole = data.stream().filter(s -> roleId.compareTo(s.getRoleId().intValue()) == 0).findFirst().get(); if(null != sysRole){ partnerListDTO.setRoleName(sysRole.getRoleName()); } @@ -286,12 +286,12 @@ //站点 long count = siteService.count(new LambdaQueryWrapper<Site>().in(Site::getPartnerId, Arrays.asList(ids)).eq(Site::getDelFlag, 0)); if(count > 0){ - return AjaxResult.error("当前合作商有关联站点,删除失败!"); + return AjaxResult.error("该合作商已关联站点不可删除!"); } //充电桩 - long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().eq(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); + long count1 = chargingPileService.count(new LambdaQueryWrapper<TChargingPile>().in(TChargingPile::getPartnerId, Arrays.asList(ids)).eq(TChargingPile::getDelFlag, 0)); if(count1 > 0){ - return AjaxResult.error("当前合作商有关联充电桩,删除失败!"); + return AjaxResult.error("该合作商已关联充电桩不可删除!"); } for (Integer id : ids) { Partner partner = this.getById(id); diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java index 80b0d10..8029ad5 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java @@ -8,17 +8,16 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.model.TChargingPile; +import com.ruoyi.chargingPile.api.model.TParkingLot; import com.ruoyi.chargingPile.api.query.GetSiteList; +import com.ruoyi.chargingPile.api.query.SiteDetailQuery; import com.ruoyi.chargingPile.api.query.SiteQuery; import com.ruoyi.chargingPile.api.vo.SiteDetailVO; import com.ruoyi.chargingPile.api.vo.SiteVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO; import com.ruoyi.chargingPile.domain.SiteMenu; import com.ruoyi.chargingPile.mapper.SiteMapper; -import com.ruoyi.chargingPile.service.IPartnerService; -import com.ruoyi.chargingPile.service.ISiteService; -import com.ruoyi.chargingPile.service.TChargingGunService; -import com.ruoyi.chargingPile.service.TChargingPileService; +import com.ruoyi.chargingPile.service.*; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -36,9 +35,11 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; +import java.util.stream.Collectors; /** * @author zhibing.pu @@ -72,6 +73,8 @@ private VipClient vipClient; @Resource private SysUserRoleClient sysUserRoleClient; + @Resource + private TParkingLotService parkingLotService; @@ -285,7 +288,7 @@ TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); if(Objects.nonNull(vip) && vip.getType() == 2){ list.forEach(item -> { - item.setVipElectrovalence(vip.getDiscount().multiply(item.getElectrovalence())); + item.setVipElectrovalence(vip.getDiscount().multiply(item.getServiceCharge()).add(item.getElectrovalenceOriginal())); }); } } @@ -294,8 +297,8 @@ } @Override - public SiteDetailVO getDetailById(Integer siteId) { - return this.baseMapper.getDetailById(siteId); + public SiteDetailVO getDetailById(SiteDetailQuery query) { + return this.baseMapper.getDetailById(query); } @Override @@ -318,6 +321,12 @@ ids = new HashSet<>(data); } } + // 查询所有的停车场的站点id + List<TParkingLot> list = parkingLotService.list(); + List<Integer> siteIds = list.stream().map(TParkingLot::getSiteId).collect(Collectors.toList()); + if(!CollectionUtils.isEmpty(ids) && !CollectionUtils.isEmpty(siteIds)){ + ids.addAll(siteIds); + } return this.baseMapper.getSiteListParkLot(ids); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java index 2412c8c..8616e00 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TAccountingStrategyDetailServiceImpl.java @@ -7,12 +7,14 @@ import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.chargingPile.api.model.TAccountingStrategy; import com.ruoyi.chargingPile.api.model.TAccountingStrategyDetail; +import com.ruoyi.chargingPile.api.model.TChargingGun; import com.ruoyi.chargingPile.api.vo.StrategyPriceVO; import com.ruoyi.chargingPile.api.vo.TAccountingStrategyDetailVO; import com.ruoyi.chargingPile.mapper.TAccountingStrategyDetailMapper; import com.ruoyi.chargingPile.mapper.TAccountingStrategyMapper; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TAccountingStrategyDetailService; +import com.ruoyi.chargingPile.service.TChargingGunService; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.security.service.TokenService; @@ -46,6 +48,8 @@ private TokenService tokenService; @Autowired private ISiteService siteService; + @Autowired + private TChargingGunService chargingGunService; @Autowired private AppUserClient appUserClient; @Override @@ -81,11 +85,11 @@ .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细")); if(Objects.nonNull(vip)) { if (vip.getType() == 2) { - accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(vip.getDiscount())); - accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(vip.getDiscount())); + accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount()))); + accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount()))); } else { - accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()).multiply(accountingStrategy.getDiscount())); - accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge()).multiply(accountingStrategy.getDiscount())); + accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount()))); + accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(accountingStrategy.getDiscount()))); } }else { accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge())); @@ -115,17 +119,21 @@ TAccountingStrategyDetailVO accountingStrategyDetailVO = list.stream().filter(detail -> DateUtils.string2LocalTime(detail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 && DateUtils.string2LocalTime(detail.getEndTime() + ("23:59:59".equals(detail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0) .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细")); - strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()) +// strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge()) +// .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP)); + strategyPriceVO.setDiscountAmount(accountingStrategyDetailVO.getServiceCharge() .subtract(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount())).setScale(2, BigDecimal.ROUND_HALF_UP)); + // 查询最高折扣的会员 + TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData(); + strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount()); // 查询最高抵扣的会员 TVip maximumDeduction = vipClient.getVipInfoByType(1).getData(); strategyPriceVO.setMaxDiscountAmount(maximumDeduction.getMaximumDeduction()); // 查询最低起步价会员 TVip monthlyCard = vipClient.getVipInfoByType(2).getData(); strategyPriceVO.setVipStartPrice(monthlyCard.getMonthlyCard()); - // 查询最高折扣的会员 - TVip monthlyCardDiscount = vipClient.getVipInfoByType(3).getData(); - strategyPriceVO.setServiceFeeDiscount(monthlyCardDiscount.getMonthlyCardDiscount()); + // 模板折扣 + strategyPriceVO.setDiscount(accountingStrategy.getDiscount()); return strategyPriceVO; } @@ -147,19 +155,72 @@ @Override public Boolean isStrategyPriceConsistent(List<TAccountingStrategyDetail> accountingStrategyDetails) { Map<Integer, BigDecimal> phaseToServiceFee = new HashMap<>(); + Map<Integer, BigDecimal> phaseToCostServiceFee = new HashMap<>(); for (TAccountingStrategyDetail detail : accountingStrategyDetails) { Integer type = detail.getType(); BigDecimal serviceFee = detail.getServiceCharge(); + BigDecimal costServiceCharge = detail.getCostServiceCharge(); if (phaseToServiceFee.containsKey(type)) { BigDecimal existingFee = phaseToServiceFee.get(type); - if (!existingFee.equals(serviceFee)) { + BigDecimal existingCostServiceCharge = phaseToCostServiceFee.get(type); + if (existingFee.compareTo(serviceFee) != 0) { return false; // 发现不一致的服务费 + } + if (existingCostServiceCharge.compareTo(costServiceCharge) != 0) { + return false; // 发现不一致的原价服务费 } } else { phaseToServiceFee.put(type, serviceFee); + phaseToCostServiceFee.put(type, costServiceCharge); } } return true; // 所有相同阶段的服务费一致 } + + @Override + public List<TAccountingStrategyDetailVO> queryStrategyByGunIdAndTime(Integer gunId) { + TChargingGun chargingGun = chargingGunService.getById(gunId); + TAccountingStrategy accountingStrategy = accountingStrategyMapper.selectById(chargingGun.getAccountingStrategyId()); + if(Objects.isNull(accountingStrategy)){ + throw new ServiceException("未查询到计费策略"); + } + List<TAccountingStrategyDetailVO> list = this.queryAccountingStrategyDetailByStrategyId(accountingStrategy.getId()); + list.stream().filter(item -> "00:00".equals(item.getEndTime())).forEach(item -> item.setEndTime("23:59:59")); + // 获取当前登录用户id + Long userId = tokenService.getLoginUserApplet().getUserId(); + // 根据id查询用户信息 + TAppUser appUser = appUserClient.getUserById(userId).getData(); + if(Objects.nonNull(appUser)){ + // 查询会员信息 + TVip vip = vipClient.getInfo1(appUser.getVipId()).getData(); + TAccountingStrategyDetailVO accountingStrategyDetailVO; + TAccountingStrategyDetailVO accountingStrategyDetailNext; + // 获取当前时间段的计费策略明细 + accountingStrategyDetailVO = list.stream().filter(detail -> DateUtils.string2LocalTime(detail.getStartTime() + ":00").compareTo(LocalTime.now()) <= 0 + && DateUtils.string2LocalTime(detail.getEndTime() + ("23:59:59".equals(detail.getEndTime())?"":":00")).compareTo(LocalTime.now()) > 0) + .findFirst().orElseThrow(() -> new ServiceException("当前时间段未查询到计费策略明细")); + // 获取后一次的计费策略明细 + accountingStrategyDetailVO.setEndTime("23:59:59".equals(accountingStrategyDetailVO.getEndTime())? "00:00":accountingStrategyDetailVO.getEndTime()); + accountingStrategyDetailNext = list.stream().filter(detail -> detail.getStartTime().compareTo(accountingStrategyDetailVO.getEndTime()) == 0) + .findFirst().orElseThrow(() -> new ServiceException("未查询到下一时间段的计费策略明细")); + if(Objects.nonNull(vip)) { + if (vip.getType() == 2) { + accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(vip.getDiscount()))); + accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(vip.getDiscount()))); + } else { + accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge().multiply(accountingStrategy.getDiscount()))); + accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge().multiply(accountingStrategy.getDiscount()))); + } + }else { + accountingStrategyDetailVO.setTotalPrice(accountingStrategyDetailVO.getElectrovalence().add(accountingStrategyDetailVO.getServiceCharge())); + accountingStrategyDetailNext.setTotalPrice(accountingStrategyDetailNext.getElectrovalence().add(accountingStrategyDetailNext.getServiceCharge())); + } + list = new ArrayList<>(); + list.add(accountingStrategyDetailVO); + list.add(accountingStrategyDetailNext); + return list; + } + return new ArrayList<>(); + } } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java index 41b90e0..c512cb8 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingGunServiceImpl.java @@ -19,6 +19,8 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.integration.api.feignClient.SendMessageClient; +import com.ruoyi.integration.api.model.QrCodeDelivery; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.api.domain.SysUser; @@ -60,6 +62,9 @@ @Resource private SysUserRoleClient sysUserRoleClient; + + @Resource + private SendMessageClient sendMessageClient; @@ -111,11 +116,22 @@ return ajaxResult; } long count = this.count(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()) - .eq(TChargingGun::getDelFlag, 0)); + .eq(TChargingGun::getDelFlag, 0).eq(TChargingGun::getChargingPileId, dto.getChargingPileId())); if(count > 0){ return AjaxResult.error("接口编码已存在"); } this.save(dto); + TChargingPile chargingPile = chargingPileService.getById(dto.getChargingPileId()); + + //下发硬件充电二维码 + String code_prefix = "https://mxcd.zhinenganguan.com?No="; + QrCodeDelivery qrCodeDelivery = new QrCodeDelivery(); + qrCodeDelivery.setCharging_pile_code(chargingPile.getCode()); + qrCodeDelivery.setCode_format(1); + qrCodeDelivery.setPrefix_length(code_prefix.length()); + qrCodeDelivery.setCode_prefix(code_prefix); + qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + dto.getCode()); + sendMessageClient.qrCodeDelivery(qrCodeDelivery); return AjaxResult.success(); } @@ -136,11 +152,22 @@ return ajaxResult; } TChargingGun one = this.getOne(new LambdaQueryWrapper<TChargingGun>().eq(TChargingGun::getCode, dto.getCode()) - .eq(TChargingGun::getDelFlag, 0)); + .eq(TChargingGun::getDelFlag, 0).eq(TChargingGun::getChargingPileId, dto.getChargingPileId())); if(null != one && !dto.getId().equals(one.getId())){ return AjaxResult.error("接口编码已存在"); } this.updateById(dto); + TChargingPile chargingPile = chargingPileService.getById(dto.getChargingPileId()); + + //下发硬件充电二维码 + String code_prefix = "https://mxcd.zhinenganguan.com?No="; + QrCodeDelivery qrCodeDelivery = new QrCodeDelivery(); + qrCodeDelivery.setCharging_pile_code(chargingPile.getCode()); + qrCodeDelivery.setCode_format(1); + qrCodeDelivery.setPrefix_length(code_prefix.length()); + qrCodeDelivery.setCode_prefix(code_prefix); + qrCodeDelivery.setQr_code(code_prefix + chargingPile.getCode() + dto.getCode()); + sendMessageClient.qrCodeDelivery(qrCodeDelivery); return AjaxResult.success(); } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java index d5b88bc..96f1155 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/TChargingPileServiceImpl.java @@ -23,12 +23,17 @@ import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TChargingGunService; import com.ruoyi.chargingPile.service.TChargingPileService; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.integration.api.feignClient.IotInterfaceClient; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; +import com.ruoyi.integration.api.vo.AddDevice; +import com.ruoyi.integration.api.vo.AddDeviceResp; +import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.order.api.feignClient.ChargingOrderAccountingStrategyClient; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.model.TChargingOrder; @@ -93,6 +98,9 @@ @Resource private SysUserRoleClient sysUserRoleClient; + @Resource + private IotInterfaceClient iotInterfaceClient; + @@ -151,7 +159,20 @@ if(count > 0){ return AjaxResult.error("设备编号已存在"); } - this.save(chargingPile); + //调用华为Iot创建设备 + AddDevice addDevice = new AddDevice(); + addDevice.setProductId("66da68d21837002b28b34ec0"); + addDevice.setNodeId(chargingPile.getCode()); + addDevice.setDeviceName(chargingPile.getName()); + addDevice.setDescription(chargingPile.getNumber().toString()); + AddDeviceResp deviceResp = iotInterfaceClient.addDevice(addDevice).getData(); + if(null != deviceResp){ + int httpStatusCode = deviceResp.getHttpStatusCode(); + if(httpStatusCode == 201){ + chargingPile.setIotdDeviceId(deviceResp.getDeviceId()); + this.save(chargingPile); + } + } return AjaxResult.success(); } @@ -227,7 +248,6 @@ @Override public AjaxResult delChargingPile(Integer[] ids) { //检查是否有关联数据 - //接口 long count = chargingGunService.count(new LambdaQueryWrapper<TChargingGun>().in(TChargingGun::getChargingPileId, Arrays.asList(ids)) .eq(TChargingGun::getDelFlag, 0)); if(count > 0){ @@ -235,7 +255,13 @@ } for (Integer id : ids) { TChargingPile chargingPile = this.getById(id); - this.removeById(chargingPile); + //调用华为Iot删除设备 + if(StringUtils.isNotEmpty(chargingPile.getIotdDeviceId())){ + DeleteDeviceResp deviceResp = iotInterfaceClient.deleteDevice(chargingPile.getIotdDeviceId()).getData(); + if(null != deviceResp && deviceResp.getHttpStatusCode() == 201){ + this.removeById(chargingPile); + } + } } return AjaxResult.success(); } @@ -265,7 +291,17 @@ List<TChargingGun> chargingGuns = chargingGunService.list(wrapper); // 查询充电枪信息 chargingPileVOS.forEach(item -> { - item.setChargingGunList(chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(item.getId())).collect(Collectors.toList())); + List<TChargingGun> chargingGunList = chargingGuns.stream().filter(gun -> gun.getChargingPileId().equals(item.getId())).collect(Collectors.toList()); + for (TChargingGun chargingGun : chargingGunList) { + if(chargingGun.getStatus().equals(4)){ + // TODO 查询正在充电的单子的实时记录 + chargingGun.setSoc(100); + } + if(chargingGun.getStatus().equals(5)){ + chargingGun.setSoc(100); + } + } + item.setChargingGunList(chargingGunList); }); return chargingPileVOS; } diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml index 24c1227..1aa8faa 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml @@ -12,7 +12,8 @@ allow-circular-references: true profiles: # 环境配置 - active: dev +# active: dev + active: prod --- spring: config: @@ -46,7 +47,7 @@ enabled: true application-id: ${spring.application.name} tx-service-group: seata_tx_group #此处配置自定义的seata事务分组名称 - enable-auto-data-source-proxy: true + enable-auto-data-source-proxy: false service: vgroup-mapping: seata_tx_group: default @@ -55,52 +56,52 @@ type: nacos nacos: # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - data-id: seata-server.properties - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + data-id: seata-server.properties + username: nacos + password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + username: nacos + password: nacos cloud: nacos: discovery: # 开发环境 - server-addr: 192.168.110.169:8848 # nacos注册中心地址 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 - group: DEFAULT_GROUP - application: seata-server #Nacos 中 Seata 名称 - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + application: seata-server #Nacos 中 Seata 名称 + username: nacos + password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml index 2acbc96..a683383 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml @@ -61,7 +61,7 @@ a.phone, a.service_phone as servicePhone, a.parking_space as parkingSpace, - DATE_FORMAT('%Y-%m-%d %H:%i:%s', a.establishment_time) as establishmentTime, + DATE_FORMAT(a.establishment_time, '%Y-%m-%d %H:%i:%s') as establishmentTime, c.num as chargingPileNumber, a.sort, a.accounting_strategy_id as accountingStrategyId, @@ -109,7 +109,7 @@ ts.id, ts.partner_id, ts.code, ts.`name`, ts.site_type, ts.business_category, ts.status, ts.construction_site, ts.img_url, ts.lon, ts.lat, ts.address, ts.country_code, ts.phone,ts.guide, ts.service_description, ts.vehicle_description, ts.parking_space, ts.rate_description, ts.space_charge_explain, ts.accounting_strategy_id,ts.del_flag,tcg.fastCount, - tcg.slowCount,tcg.superCount,tasd.electrovalence,tasd.vipElectrovalence,tcg.superFreeCount,tcg.fastFreeCount,tcg.slowFreeCount, + tcg.slowCount,tcg.superCount,tasd.electrovalence,tasd.vipElectrovalence,tasd.serviceCharge,tasd.electrovalenceOriginal,tcg.superFreeCount,tcg.fastFreeCount,tcg.slowFreeCount, ROUND( 6378.138 * 2 * ASIN( SQRT( @@ -149,8 +149,10 @@ left join ( select a.accounting_strategy_id, + a.service_charge AS serviceCharge, + a.electrovalence AS electrovalenceOriginal, (a.electrovalence+a.service_charge) AS electrovalence, - ((a.electrovalence+a.service_charge)*b.discount) AS vipElectrovalence + (a.electrovalence + (a.service_charge*b.discount)) AS vipElectrovalence from t_accounting_strategy_detail a left join @@ -160,6 +162,9 @@ <where> <if test="null != query.name and '' != query.name"> and ts.`name` like CONCAT('%', #{query.name}, '%') + </if> + <if test="null != query.cityCode and '' != query.cityCode"> + and ts.cityCode = #{query.cityCode} </if> AND ts.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} AND ts.status = ${@com.ruoyi.common.core.enums.status.SiteStatusEnum@NORMAL_USE.getCode()} @@ -180,13 +185,36 @@ </if> </select> <select id="getDetailById" resultType="com.ruoyi.chargingPile.api.vo.SiteDetailVO"> - SELECT <include refid="Base_Column_List"></include> - FROM t_site WHERE id = #{siteId} AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} + SELECT id, partner_id, code, `name`, site_type, business_category, status, construction_site, img_url, province, province_code, + city, city_code, districts, districts_code, lon, lat, address, country_code, phone, service_phone, guide, start_service_time, + end_service_time, service_description, vehicle_description, parking_space, rate_description, space_charge_explain, + accounting_strategy_id, establishment_time, sort, remark, create_time, del_flag, mark, + ROUND( + 6378.138 * 2 * ASIN( + SQRT( + POW( + SIN( + ( + #{query.lat} * PI() / 180 - ts.lat * PI() / 180 + ) / 2 + ), + 2 + ) + COS(#{query.lat} * PI() / 180) * COS(ts.lat * PI() / 180) * POW( + SIN( + ( + #{query.lon} * PI() / 180 - ts.lon * PI() / 180 + ) / 2 + ), + 2 + ) + ) + ) * 1000 + ) AS distance + FROM t_site WHERE id = #{query.siteId} AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </select> <select id="getSiteListParkLot" resultType="com.ruoyi.chargingPile.api.model.Site"> - select ts.id, ts.partner_id, ts.code, ts.`name`, ts.site_type, ts.business_category, ts.status,tpl.id AS parkingLotId + select ts.id, ts.partner_id, ts.code, ts.`name`, ts.site_type, ts.business_category, ts.status from t_site ts - left join t_parking_lot tpl on (ts.id = tpl.site_id) <where> <if test="null != ids and ids.size()>0"> AND ts.id IN @@ -195,7 +223,6 @@ </foreach> </if> AND ts.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} - AND tpl.id IS NULL </where> </select> <select id="getSiteListGun" resultType="com.ruoyi.chargingPile.api.model.Site"> @@ -268,6 +295,9 @@ <if test="null != query.name and '' != query.name"> and ts.`name` like CONCAT('%', #{query.name}, '%') </if> + <if test="null != query.cityCode and '' != query.cityCode"> + and ts.cityCode = #{query.cityCode} + </if> AND ts.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} AND ts.status = ${@com.ruoyi.common.core.enums.status.SiteStatusEnum@NORMAL_USE.getCode()} </where> diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/SecurityDetectionController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/SecurityDetectionController.java new file mode 100644 index 0000000..618b007 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/controller/SecurityDetectionController.java @@ -0,0 +1,34 @@ +package com.ruoyi.integration.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.model.SecurityDetection; +import com.ruoyi.integration.mongodb.service.SecurityDetectionService; +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 javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/10/8 14:25 + */ +@RestController +@RequestMapping("/securityDetection") +public class SecurityDetectionController { + + @Resource + private SecurityDetectionService securityDetectionService; + + /** + * 获取安全检测数据 + * @param transactionSerialNumber + * @return + */ + @PostMapping("/getSecurityDetection") + public R<SecurityDetection> getSecurityDetection(@RequestParam("transactionSerialNumber") String transactionSerialNumber){ + SecurityDetection securityDetection = securityDetectionService.getSecurityDetection(transactionSerialNumber); + return R.ok(securityDetection); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java index 3062d45..6d92d1a 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/constant/SendTagConstant.java @@ -118,4 +118,12 @@ * 远程更新应答 */ public final static String PLATFORM_REMOTE_UPDATE_REPLY ="platform_remote_update_reply"; + /** + * 二维码下发应答 + */ + public final static String QR_CODE_DELIVERY_REPLY ="qr_code_delivery_reply"; + /** + * 安全监测 + */ + public final static String SECURITY_DETECTION ="security_detection"; } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java new file mode 100644 index 0000000..e68a21f --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/IotInterfaceController.java @@ -0,0 +1,48 @@ +package com.ruoyi.integration.iotda.controller; + +import com.huaweicloud.sdk.iotda.v5.model.AddDeviceResponse; +import com.huaweicloud.sdk.iotda.v5.model.DeleteDeviceResponse; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.integration.api.vo.AddDevice; +import com.ruoyi.integration.api.vo.AddDeviceResp; +import com.ruoyi.integration.api.vo.DeleteDeviceResp; +import com.ruoyi.integration.iotda.utils.api.IotInterfaceUtil; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +/** + * @author zhibing.pu + * @Date 2024/10/8 10:29 + */ +@RestController +@RequestMapping("/iotInterface") +public class IotInterfaceController { + + @Resource + private IotInterfaceUtil iotInterfaceUtil; + + + + + + /** + * 添加设备 + * @return + */ + @PostMapping("/addDevice") + public R<AddDeviceResp> addDevice(@RequestBody AddDevice addDevice){ + return iotInterfaceUtil.addDeviceRequest(addDevice.getProductId(), addDevice.getNodeId(), addDevice.getDeviceName(), addDevice.getDescription()); + } + + + /** + * 删除设备 + * @param deviceId + * @return + */ + @PostMapping("/deleteDevice") + public R<DeleteDeviceResp> deleteDevice(@RequestParam("deviceId") String deviceId){ + return iotInterfaceUtil.deleteDeviceRequest(deviceId); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java index 53b62e4..bd76411 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/controller/SendMessageController.java @@ -228,5 +228,14 @@ public String platformRemoteUpdate(@RequestBody PlatformRemoteUpdate platformRemoteUpdate){ return iotMessageProduce.sendMessage(platformRemoteUpdate.getCharging_pile_code(), ServiceIdMenu.PLATFORM_REMOTE_UPDATE.getKey(),messageUtil.platformRemoteUpdate(platformRemoteUpdate)); } + /** + * 二维码下发 + * @param qrCodeDelivery 实体对象 + * @return + */ + @PostMapping("/qrCodeDelivery") + public String qrCodeDelivery(@RequestBody QrCodeDelivery qrCodeDelivery){ + return iotMessageProduce.sendMessage(qrCodeDelivery.getCharging_pile_code(), ServiceIdMenu.QR_CODE_DELIVERY.getKey(),messageUtil.qrCodeDelivery(qrCodeDelivery)); + } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java index 5146187..017973a 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/enums/ServiceIdMenu.java @@ -90,6 +90,10 @@ * 远程更新 */ PLATFORM_REMOTE_UPDATE ("远程更新","platform_remote_update"), + /** + * 二维码下发 + */ + QR_CODE_DELIVERY ("二维码下发","qr_code_delivery"), ; private String key; private String value; diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java index 7582df9..0f2fb02 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/api/IotInterfaceUtil.java @@ -1,22 +1,19 @@ package com.ruoyi.integration.iotda.utils.api; -import com.huaweicloud.sdk.core.auth.AbstractCredentials; -import com.huaweicloud.sdk.core.auth.ICredential; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; -import com.huaweicloud.sdk.iotda.v5.IoTDAClient; import com.huaweicloud.sdk.iotda.v5.model.*; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.CodeGenerateUtils; -import com.ruoyi.common.core.utils.uuid.UUID; +import com.ruoyi.integration.api.vo.AddDeviceResp; +import com.ruoyi.integration.api.vo.DeleteDeviceResp; import com.ruoyi.integration.iotda.builder.IotBuilder; -import com.ruoyi.integration.iotda.config.IotAccountConfig; import com.ruoyi.integration.iotda.config.IotDAConfig; -import com.ruoyi.integration.iotda.constant.IotConstant; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.RestController; import java.text.MessageFormat; import java.util.ArrayList; @@ -26,7 +23,7 @@ * iot接口调用工具类 */ @Slf4j -@RestController +@Component public class IotInterfaceUtil { private static final String dataFormat = "json"; @@ -118,7 +115,7 @@ * @param description 设备描述 * @return AddDeviceResponse */ - public AddDeviceResponse addDeviceRequest(String productId,String nodeId,String deviceName,String description) { + public R<AddDeviceResp> addDeviceRequest(String productId,String nodeId,String deviceName,String description) { AddDeviceRequest request = new AddDeviceRequest(); AddDevice body = new AddDevice(); body.withDeviceId(nodeId); @@ -130,7 +127,10 @@ try { AddDeviceResponse response = iotBuilder.buildIot().addDevice(request); log.info("创建设备:{}",response.toString()); - return response; + + AddDeviceResp addDeviceResp = new AddDeviceResp(); + BeanUtils.copyProperties(response, addDeviceResp); + return R.ok(addDeviceResp); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { @@ -142,7 +142,7 @@ System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } - return null; + return R.fail(); } /** @@ -234,13 +234,15 @@ * @param deviceId 设备ID 使用已有设备编号 * @return DeleteDeviceResponse */ - public DeleteDeviceResponse deleteDeviceRequest(String deviceId) { + public R<DeleteDeviceResp> deleteDeviceRequest(String deviceId) { DeleteDeviceRequest request = new DeleteDeviceRequest(); request.withDeviceId(deviceId); try { DeleteDeviceResponse response = iotBuilder.buildIot().deleteDevice(request); log.info("删除设备:{}",response.toString()); - return response; + DeleteDeviceResp deleteDeviceResp = new DeleteDeviceResp(); + BeanUtils.copyProperties(response, deleteDeviceResp); + return R.ok(deleteDeviceResp); } catch (ConnectionException e) { e.printStackTrace(); } catch (RequestTimeoutException e) { @@ -252,6 +254,6 @@ System.out.println(e.getErrorCode()); System.out.println(e.getErrorMsg()); } - return null; + return R.fail(); } } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java index c3961f0..bbc01a0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java @@ -23,12 +23,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; /** * iotda消息监听 @@ -62,6 +62,11 @@ String productId = header.getString("product_id"); // 产品id String service_id = content.getString("service_id"); log.info("服务id:{}",service_id); + // 写入文件 + FileWriter writer = new FileWriter("D:/sample.txt",true); + writer.write("接收到消息中转:"+jsonObject+"\n"); + writer.write("服务id:"+service_id+"\n"); + writer.close(); SendResult sendResult; // 设备消息下发 String result; @@ -76,6 +81,11 @@ onlineReply.setOnline_result(0); result = iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.ONLINE_REPLY.getKey(), messageUtil.onlineReply(onlineReply)); log.info("充电桩登录认证-返回结果:{}",result); + // 响应硬件 对时设置应答 + TimingSettingReply timingSettingReplyOnline = new TimingSettingReply(); + timingSettingReplyOnline.setCharging_pile_code(onlineMessage.getCharging_pile_code()); + timingSettingReplyOnline.setCurrent_time(CP56Time2aConverter.convertToCP56Time2a(new Date())); + iotMessageProduce.sendMessage(deviceId, ServiceIdMenu.TIMING_SETTING_REPLY.getKey(),messageUtil.timingSettingReply(timingSettingReplyOnline)); break; case SendTagConstant.PING: PingMessage pingMessage = JSON.parseObject(content.toJSONString(),PingMessage.class); @@ -129,14 +139,14 @@ AcquisitionBillingModeMessage acquisitionBillingModeMessage = JSON.parseObject(content.toJSONString(),AcquisitionBillingModeMessage.class); sendResult = enhanceProduce.acquisitionBillingModeMessage(acquisitionBillingModeMessage); // 响应硬件 计费模型请求应答 1=尖阶段,2=峰阶段,3=平阶段,4=谷阶段 - List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(acquisitionBillingModeMessage.getCharging_pile_code()).getData(); + List<TAccountingStrategyDetail> accountingStrategyDetails = accountingStrategyDetailClient.getDetailListByCode(acquisitionBillingModeMessage.getCharging_pile_code().substring(0,14)).getData(); Map<Integer, TAccountingStrategyDetail> strategyPrice = StrategyUtil.getStrategyPrice(accountingStrategyDetails); // 价格设置 AcquisitionBillingModeReply acquisitionBillingModeReply = new AcquisitionBillingModeReply(); StrategyUtil.setStrategyPrice(strategyPrice,acquisitionBillingModeReply); // 时段设置 StrategyUtil.setTime(accountingStrategyDetails,acquisitionBillingModeReply); - TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(acquisitionBillingModeMessage.getCharging_pile_code()).getData(); + TAccountingStrategyDetail accountingStrategyDetail = accountingStrategyDetailClient.getDetailByCode(acquisitionBillingModeMessage.getCharging_pile_code().substring(0,14)).getData(); acquisitionBillingModeReply.setBilling_model_code(accountingStrategyDetail.getId().toString()); acquisitionBillingModeReply.setCharging_pile_code(acquisitionBillingModeMessage.getCharging_pile_code()); acquisitionBillingModeReply.setLoss_ratio(BigDecimal.ZERO); @@ -256,6 +266,16 @@ sendResult = enhanceProduce.platformRestartReplyMessage(platformRestartReplyMessage); // 响应硬件 break; + case SendTagConstant.QR_CODE_DELIVERY_REPLY: + QrCodeDeliveryReplyMessage qrCodeDeliveryReplyMessage = JSON.parseObject(content.toJSONString(),QrCodeDeliveryReplyMessage.class); + sendResult = enhanceProduce.qrCodeDeliveryReplyMessage(qrCodeDeliveryReplyMessage); + // 响应硬件 + break; + case SendTagConstant.SECURITY_DETECTION: + SecurityDetectionMessage securityDetectionMessage = JSON.parseObject(content.toJSONString(),SecurityDetectionMessage.class); + sendResult = enhanceProduce.securityDetectionMessage(securityDetectionMessage); + // 响应硬件 + break; default: PlatformRemoteUpdateReplyMessage platformRemoteUpdateReplyMessage = JSON.parseObject(content.toJSONString(),PlatformRemoteUpdateReplyMessage.class); sendResult = enhanceProduce.platformRemoteUpdateReplyMessage(platformRemoteUpdateReplyMessage); @@ -364,4 +384,32 @@ return R.ok(message); } + @ApiOperation(value = "测试",tags = {"硬件接口"}) + @GetMapping(value = "/test") + public R test() { + String orderNum = "2024092646526785213546"; + String deviceId = "3401231001200202"; + Long orderId = 2024065544L; + BigDecimal money = new BigDecimal(50); + PlatformStartCharging platformStartCharging = new PlatformStartCharging(); + platformStartCharging.setTransaction_serial_number(orderNum); + platformStartCharging.setCharging_pile_code(deviceId); + platformStartCharging.setCharging_gun_code("02"); + platformStartCharging.setCard_number(orderId.toString()); + platformStartCharging.setAccount_balance(money); + String message = iotMessageProduce.sendMessage(platformStartCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_START_CHARGING.getKey(), messageUtil.platformStartCharging(platformStartCharging)); + System.err.println(platformStartCharging); + return R.ok(message); + } + + @ApiOperation(value = "测试",tags = {"硬件接口"}) + @GetMapping(value = "/stop") + public R test1() { + PlatformStopCharging platformStopCharging = new PlatformStopCharging(); + platformStopCharging.setCharging_pile_code("3401231001200202"); + platformStopCharging.setCharging_gun_code("02"); + String message = iotMessageProduce.sendMessage(platformStopCharging.getCharging_pile_code(), ServiceIdMenu.PLATFORM_STOP_CHARGING.getKey(),messageUtil.platformStopCharging(platformStopCharging)); + return R.ok(message); + } + } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java index 89e9fc1..67e1e07 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/tools/MessageUtil.java @@ -55,6 +55,8 @@ private PlatformRestartService platformRestartService; @Autowired private PlatformRemoteUpdateService platformRemoteUpdateService; + @Autowired + private QrCodeDeliveryService qrCodeDeliveryService; /** * 登录认证应答 @@ -264,6 +266,16 @@ } /** + * 二维码下发 + * @param qrCodeDelivery 实体对象 + * @return + */ + public JSONObject qrCodeDelivery(QrCodeDelivery qrCodeDelivery){ + qrCodeDeliveryService.create(qrCodeDelivery); + return getMessageJsonString(qrCodeDelivery, ServiceIdMenu.QR_CODE_DELIVERY.getValue()); + } + + /** * 统一封装消息 * @param object 实体对象 * @param serviceId 服务ID diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryReplyService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryReplyService.java new file mode 100644 index 0000000..6d93eef --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryReplyService.java @@ -0,0 +1,11 @@ +package com.ruoyi.integration.mongodb.service; + +import com.ruoyi.integration.api.model.QrCodeDelivery; +import com.ruoyi.integration.api.model.QrCodeDeliveryReply; +import com.ruoyi.integration.mongodb.base.BaseService; + +/** + */ +public interface QrCodeDeliveryReplyService extends BaseService<QrCodeDeliveryReply> { + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryService.java new file mode 100644 index 0000000..7bae329 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/QrCodeDeliveryService.java @@ -0,0 +1,11 @@ +package com.ruoyi.integration.mongodb.service; + +import com.ruoyi.integration.api.model.Pong; +import com.ruoyi.integration.api.model.QrCodeDelivery; +import com.ruoyi.integration.mongodb.base.BaseService; + +/** + */ +public interface QrCodeDeliveryService extends BaseService<QrCodeDelivery> { + +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/SecurityDetectionService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/SecurityDetectionService.java new file mode 100644 index 0000000..ae025dd --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/SecurityDetectionService.java @@ -0,0 +1,18 @@ +package com.ruoyi.integration.mongodb.service; + +import com.ruoyi.integration.api.model.QrCodeDelivery; +import com.ruoyi.integration.api.model.SecurityDetection; +import com.ruoyi.integration.mongodb.base.BaseService; + +/** + */ +public interface SecurityDetectionService extends BaseService<SecurityDetection> { + + + /** + * 根据业务流水号查询数据 + * @param transactionSerialNumber + * @return + */ + SecurityDetection getSecurityDetection(String transactionSerialNumber); +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryReplyServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryReplyServiceImpl.java new file mode 100644 index 0000000..1e18a47 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryReplyServiceImpl.java @@ -0,0 +1,36 @@ +package com.ruoyi.integration.mongodb.service.impl; + +import com.ruoyi.integration.api.model.QrCodeDeliveryReply; +import com.ruoyi.integration.iotda.constant.IotConstant; +import com.ruoyi.integration.mongodb.service.QrCodeDeliveryReplyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * 心跳包应答实现类 + **/ +@Service +public class QrCodeDeliveryReplyServiceImpl implements QrCodeDeliveryReplyService { + @Autowired + private MongoTemplate mongoTemplate; + + @Override + public int create(QrCodeDeliveryReply qrCodeDeliveryReply) { + mongoTemplate.save(qrCodeDeliveryReply); + return IotConstant.SUCCESS; + } + + @Override + public QrCodeDeliveryReply findById(String id) { + return mongoTemplate.findById(id, QrCodeDeliveryReply.class); + } + + @Override + public List<QrCodeDeliveryReply> findAll() { + return mongoTemplate.findAll(QrCodeDeliveryReply.class); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryServiceImpl.java new file mode 100644 index 0000000..d46bf51 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/QrCodeDeliveryServiceImpl.java @@ -0,0 +1,36 @@ +package com.ruoyi.integration.mongodb.service.impl; + +import com.ruoyi.integration.api.model.QrCodeDelivery; +import com.ruoyi.integration.iotda.constant.IotConstant; +import com.ruoyi.integration.mongodb.service.QrCodeDeliveryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * 心跳包应答实现类 + **/ +@Service +public class QrCodeDeliveryServiceImpl implements QrCodeDeliveryService { + @Autowired + private MongoTemplate mongoTemplate; + + @Override + public int create(QrCodeDelivery qrCodeDelivery) { + mongoTemplate.save(qrCodeDelivery); + return IotConstant.SUCCESS; + } + + @Override + public QrCodeDelivery findById(String id) { + return mongoTemplate.findById(id, QrCodeDelivery.class); + } + + @Override + public List<QrCodeDelivery> findAll() { + return mongoTemplate.findAll(QrCodeDelivery.class); + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/SecurityDetectionServiceImpl.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/SecurityDetectionServiceImpl.java new file mode 100644 index 0000000..b7963bb --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/mongodb/service/impl/SecurityDetectionServiceImpl.java @@ -0,0 +1,50 @@ +package com.ruoyi.integration.mongodb.service.impl; + +import com.ruoyi.integration.api.model.SecurityDetection; +import com.ruoyi.integration.iotda.constant.IotConstant; +import com.ruoyi.integration.mongodb.service.SecurityDetectionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * 心跳包应答实现类 + **/ +@Service +public class SecurityDetectionServiceImpl implements SecurityDetectionService { + @Autowired + private MongoTemplate mongoTemplate; + + @Override + public int create(SecurityDetection securityDetection) { + mongoTemplate.save(securityDetection); + return IotConstant.SUCCESS; + } + + @Override + public SecurityDetection findById(String id) { + return mongoTemplate.findById(id, SecurityDetection.class); + } + + @Override + public List<SecurityDetection> findAll() { + return mongoTemplate.findAll(SecurityDetection.class); + } + + /** + * 根据业务流水号查询数据 + * @param transactionSerialNumber + * @return + */ + @Override + public SecurityDetection getSecurityDetection(String transactionSerialNumber) { + List<SecurityDetection> securityDetectionList = mongoTemplate.find(new Query().addCriteria(Criteria.where("transaction_serial_number") + .is(transactionSerialNumber)), SecurityDetection.class); + return securityDetectionList.size() > 0 ? securityDetectionList.get(0) : null; + } +} diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryMessage.java new file mode 100644 index 0000000..6b9ad6d --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryMessage.java @@ -0,0 +1,21 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +/** + * + **/ + +@Data +public class QrCodeDeliveryMessage extends BaseMessage { + + private String charging_pile_code; // 桩编码 + private Integer code_format; // "0:第一种前缀+桩编号 1:第二种前缀+桩编号+枪编号" + private Integer prefix_length; // 二维码前缀长度长度最大不超过200 字节 + private String code_prefix; // 如:“www.baidu.com?No=” + private String qr_code; // 二维码内容,如:“www.baidu.com?No=3422000100023301” + +} + + diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryReplyMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryReplyMessage.java new file mode 100644 index 0000000..7dfb1b1 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/QrCodeDeliveryReplyMessage.java @@ -0,0 +1,18 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +/** + * + **/ + +@Data +public class QrCodeDeliveryReplyMessage extends BaseMessage { + + private String charging_pile_code; // 桩编码 + private Integer delivery_result; // 设置结果(0:成功,1:失败) + +} + + diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/SecurityDetectionMessage.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/SecurityDetectionMessage.java new file mode 100644 index 0000000..c7c0f12 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/model/SecurityDetectionMessage.java @@ -0,0 +1,21 @@ +package com.ruoyi.integration.rocket.model; + +import com.ruoyi.integration.rocket.base.BaseMessage; +import lombok.Data; + +/** + * + **/ + +@Data +public class SecurityDetectionMessage extends BaseMessage { + + private String charging_pile_code; // 桩编码 + private String charging_gun_code; // 抢号 + private Integer secure_connection; // 车枪连接(0=未连接,1=连接) + private Integer nsulation_detection; // 绝缘检测(0=安全,1=不安全) + private Integer electronic_lock_lock; // 电磁锁状态(0=未锁,1=已锁) + +} + + diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java index a3a2137..21d9a0e 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/rocket/produce/EnhanceProduce.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson.JSONObject; import com.ruoyi.integration.api.model.ErrorMessage; import com.ruoyi.integration.api.model.ParameterSetting; +import com.ruoyi.integration.api.model.QrCodeDeliveryReply; +import com.ruoyi.integration.api.model.SecurityDetection; import com.ruoyi.integration.iotda.constant.SendTagConstant; import com.ruoyi.integration.rocket.model.*; import com.ruoyi.integration.rocket.util.RocketMQEnhanceTemplate; @@ -318,4 +320,27 @@ message.setSource(SendTagConstant.PLATFORM_REMOTE_UPDATE_REPLY); return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.PLATFORM_REMOTE_UPDATE_REPLY, SendTagConstant.PLATFORM_REMOTE_UPDATE_REPLY, message); } + + /** + * 二维码下发应答 + */ + public SendResult qrCodeDeliveryReplyMessage(QrCodeDeliveryReplyMessage message) { + // 设置业务key + message.setKey(UUID.randomUUID().toString()); + // 设置消息来源,便于查询 + message.setSource(SendTagConstant.QR_CODE_DELIVERY_REPLY); + return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.QR_CODE_DELIVERY_REPLY, SendTagConstant.QR_CODE_DELIVERY_REPLY, message); + } + + /** + * 安全监测 + */ + public SendResult securityDetectionMessage(SecurityDetectionMessage message) { + // 设置业务key + message.setKey(UUID.randomUUID().toString()); + // 设置消息来源,便于查询 + message.setSource(SendTagConstant.SECURITY_DETECTION); + return rocketMQEnhanceTemplate.send(TOPIC+SendTagConstant.SECURITY_DETECTION, SendTagConstant.SECURITY_DETECTION, message); + } + } \ No newline at end of file diff --git a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml index 20bdc83..12e29cf 100644 --- a/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-integration/src/main/resources/bootstrap.yml @@ -12,7 +12,8 @@ allow-circular-references: true profiles: # 环境配置 - active: dev +# active: dev + active: prod --- spring: @@ -63,52 +64,52 @@ type: nacos nacos: # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - data-id: seata-server.properties - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + data-id: seata-server.properties + username: nacos + password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + username: nacos + password: nacos cloud: nacos: discovery: # 开发环境 - server-addr: 192.168.110.169:8848 # nacos注册中心地址 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 - group: DEFAULT_GROUP - application: seata-server #Nacos 中 Seata 名称 - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + application: seata-server #Nacos 中 Seata 名称 + username: nacos + password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index a9d993a..db7f2da 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -61,6 +61,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; +import io.swagger.models.auth.In; import jdk.nashorn.internal.runtime.ListAdapter; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -139,8 +140,27 @@ private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService; - - + /** + * 远程调用根据枪id 查询最新的订单id 用户后台结束充电 + * @param id + * @return + */ + @ResponseBody + @PostMapping(value = "/queryOrderByGunId/{id}") + public R<String> queryOrderByGunId(@PathVariable("id") String id) { + List<Integer> integers = new ArrayList<>(); + integers.add(2); + integers.add(3); + integers.add(4); + TChargingOrder one = chargingOrderService.lambdaQuery() + .eq(TChargingOrder::getChargingGunId, id) + .in(TChargingOrder::getStatus, integers) + .one(); + if (one!=null){ + return R.ok(one.getId().toString()); + } + return R.ok(); + } @ResponseBody @PostMapping(value = "/pay/order/list") @ApiOperation(value = "列表", tags = {"管理后台-支付订单-订单信息"}) @@ -322,10 +342,10 @@ * @param * @return */ - @GetMapping(value = "/getCar") - public R<Long> getCar() { + @GetMapping(value = "/getCar/{id}") + public R<Long> getCar(@PathVariable("id")String id) { List<TChargingOrder> list = chargingOrderService.list(new LambdaQueryWrapper<TChargingOrder>() - .eq(TChargingOrder::getAppUserId, tokenService.getLoginUserApplet().getUserId()) + .eq(TChargingOrder::getAppUserId, id) .isNotNull(TChargingOrder::getAppUserCarId)); if (!list.isEmpty()){ // 最近使用的车辆id diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java index 2a9cf5f..f686282 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java @@ -202,14 +202,16 @@ for (int i = 0; i < split1.length; i++) { Integer reduce = tShoppingOrderService.list(new QueryWrapper<TShoppingOrder>() .eq("order_type",1) - .ne("refund_status", 2)) + .eq("goods_id", split1[i]) + .isNull("refund_status")) .stream().map(TShoppingOrder::getPurchaseQuantity).reduce(0, Integer::sum); res.add(reduce); } break; case 2: for (int i = 0; i < split1.length; i++) { - Integer reduce = exchangeOrderService.list(new QueryWrapper<TExchangeOrder>().eq("order_type",1).ne("status",4).eq("goods_id", split1[i])) + Integer reduce = exchangeOrderService.list(new QueryWrapper<TExchangeOrder>().eq("order_type",1) + .ne("status",4).eq("goods_id", split1[i])) .stream().map(TExchangeOrder::getPurchaseQuantity).reduce(0, Integer::sum); res.add(reduce); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java index e3838b3..d69169a 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderInvoiceController.java @@ -75,6 +75,7 @@ @RequestParam("invoiceUrl") String invoiceUrl){ TOrderInvoice orderInvoice = orderInvoiceService.getById(id); orderInvoice.setInvoiceUrl(invoiceUrl); + orderInvoice.setStatus(3); orderInvoiceService.updateById(orderInvoice); // 发送邮箱 // 收件人电子邮箱,TODO 换成自己的收件箱 diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java index 8145de2..3158616 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java @@ -1,6 +1,7 @@ package com.ruoyi.order.controller; import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; @@ -15,10 +16,13 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.security.service.TokenService; +import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.model.TExchangeOrder; import com.ruoyi.order.api.model.TShoppingOrder; +import com.ruoyi.order.api.model.TShoppingOrderRefund; import com.ruoyi.order.api.query.ShoppingOrderQuery; import com.ruoyi.order.dto.*; +import com.ruoyi.order.service.TShoppingOrderRefundService; import com.ruoyi.order.service.TShoppingOrderService; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; @@ -40,6 +44,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -73,7 +78,31 @@ private AppCouponClient appCouponClient; @Resource private SysUserClient sysUserClient; - + @Resource + private TShoppingOrderRefundService shoppingOrderRefundService; + /** + * 远程管理后台取消订单后退款回调 + */ + @ResponseBody + @PostMapping(value = "/shoppingOrderWxRefund") + public void shoppingOrderWxRefund(@RequestParam("out_trade_no") String out_refund_no, + @RequestParam("out_trade_no") String refund_id, + @RequestParam("out_trade_no") String tradeState, + @RequestParam("out_trade_no") String success_time){ + if("SUCCESS".equals(tradeState)){ + TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, out_refund_no)); + one.setRefundSerialNumber(refund_id); + one.setRefundStatus(2); + one.setRefundTime(LocalDateTime.parse(success_time, DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + shoppingOrderRefundService.updateById(one); + TShoppingOrder byId = shoppingOrderService.getById(one.getShoppingOrderId()); + byId.setStatus(4); + shoppingOrderService.updateById(byId); + if (byId.getAppCouponId() != null) { + appCouponClient.refund(byId.getAppCouponId().toString()); + } + } + } @PostMapping("/getShoppingOrderList") @ApiOperation(value = "列表查询", tags = {"管理后台-购物订单"}) @@ -118,7 +147,10 @@ TAppUserAddress data = appUserClient.getAddressById(byId.getAppUserAddressId()).getData(); if (data != null) { byId.setReceivingName(data.getName() + "-" + data.getPhone()); - byId.setReceivingAddress(data.getAddress()); + byId.setReceivingAddress(data.getProvince()+data.getCity() + +(data.getDistrict()==null?"":data.getDistrict()) + +(data.getAddress()==null?"":data.getAddress()) + +(data.getHouseNumber()==null?"":data.getHouseNumber())); } } if (byId.getOrderType()==1){ @@ -141,7 +173,7 @@ shoppingOrderService.removeBatchByIds(Arrays.asList(ids.split(","))); return AjaxResult.success(); } - + @GetMapping("/cancelShoppingOrder") @ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"}) public AjaxResult cancelShoppingOrder(String id) { @@ -151,15 +183,30 @@ byId.setCancellationId(userid); byId.setCancellationTime(LocalDateTime.now()); byId.setStatus(4); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + TShoppingOrderRefund tShoppingOrderRefund = new TShoppingOrderRefund(); + tShoppingOrderRefund.setPayTime(byId.getPayTime()); + tShoppingOrderRefund.setPayCode(byId.getSerialNumber()); + tShoppingOrderRefund.setPayAmount(byId.getPaymentAmount()); + tShoppingOrderRefund.setPayType(1); + tShoppingOrderRefund.setShoppingOrderId(byId.getId()); + tShoppingOrderRefund.setRefundAmount(byId.getPaymentAmount()); + tShoppingOrderRefund.setRefundStatus(1); + tShoppingOrderRefund.setCode("GWF" + sdf.format(new Date()) + Double.valueOf(Math.random() * 1000).intValue()); + tShoppingOrderRefund.setRefundTitle("后台取消订单"); + tShoppingOrderRefund.setRefundContent("后台取消订单"); + tShoppingOrderRefund.setRefundReason("后台取消订单"); + tShoppingOrderRefund.setRefundRemark("全额退款"); + tShoppingOrderRefund.setRefundTotalAmount(byId.getPaymentAmount()); switch (byId.getPaymentType()) { case 1: // 微信 WxPaymentRefundModel wxPaymentRefundModel = new WxPaymentRefundModel(); wxPaymentRefundModel.setTransaction_id(byId.getSerialNumber()); wxPaymentRefundModel.setOut_trade_no(byId.getCode()); - wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GW")); - // todo 部署到线上之后写回调地址 -// wxPaymentRefundModel.setNotify_url(""); + wxPaymentRefundModel.setOut_refund_no(OrderCodeUtil.getOrderCode("GWTK")); + wxPaymentRefundModel.setReason("后台购物订单退款"); + wxPaymentRefundModel.setNotify_url("/payment/wx/refund/notify"); String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString(); if (string.contains(".")) { string = string.substring(0, string.indexOf(".")); @@ -167,29 +214,40 @@ int i = Integer.parseInt(string); WxPaymentRefundModel.RefundAmount refundAmount = new WxPaymentRefundModel.RefundAmount(); refundAmount.setTotal(i); + refundAmount.setCurrency("CNY"); refundAmount.setRefund(i); wxPaymentRefundModel.setAmount(refundAmount); - wxPaymentClient.refundOrderR(wxPaymentRefundModel); + R<String> stringR = wxPaymentClient.refundOrderR(wxPaymentRefundModel); + if(200 == stringR.getCode()){ + shoppingOrderRefundService.save(tShoppingOrderRefund); + } break; case 2: // 支付宝 RefundReq refundReq = new RefundReq(); refundReq.setOutTradeNo(byId.getSerialNumber()); - String gw = OrderCodeUtil.getOrderCode("GW"); + String gw = OrderCodeUtil.getOrderCode("GWF"); refundReq.setOutRequestNo(gw); refundReq.setRefundAmount(byId.getPaymentAmount().toString()); - refundReq.setRefundReason("后台退款"); + refundReq.setRefundReason("后台购物订单退款"); RefundResp data = aliPaymentClient.refund(refundReq).getData(); if (data != null) { - // 退款成功 回退优惠券 -// byId.setStatus(4); + byId.setStatus(4); + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); + TShoppingOrderRefund one = shoppingOrderRefundService.getOne(new LambdaQueryWrapper<TShoppingOrderRefund>().eq(TShoppingOrderRefund::getRefundCode, data.getOutTradeNo())); + one.setRefundSerialNumber(data.getTradeNo()); + one.setRefundStatus(2); + one.setRefundTime(LocalDateTime.parse(sdf1.format(new Date()), DateTimeFormatter.ofPattern("yyyy-MM-DDTHH:mm:ss+TIMEZONE"))); + shoppingOrderRefundService.updateById(one); if (byId.getAppCouponId() != null) { + // 退款成功 回退优惠券 appCouponClient.refund(byId.getAppCouponId().toString()); - byId.setRefundCode(gw); - byId.setRefundAmount(byId.getPaymentAmount()); - byId.setRefundStatus(2); - byId.setRefundSerialNumber(data.getTradeNo()); } + byId.setRefundCode(gw); + byId.setRefundAmount(byId.getPaymentAmount()); + byId.setRefundStatus(2); + byId.setRefundSerialNumber(data.getTradeNo()); + shoppingOrderService.updateById(byId); } break; } @@ -223,11 +281,11 @@ public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum() { Long userId = tokenService.getLoginUserApplet().getUserId(); long dfh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0) - .eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId)); + .eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2)); long dsh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0) - .eq(TShoppingOrder::getStatus, 2).eq(TShoppingOrder::getAppUserId, userId)); + .eq(TShoppingOrder::getStatus, 2).eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2)); long ywc = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0) - .eq(TShoppingOrder::getStatus, 3).eq(TShoppingOrder::getAppUserId, userId)); + .eq(TShoppingOrder::getStatus, 3).eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2)); Map<String, Object> map = new HashMap<>(); map.put("dfh", dfh); map.put("dsh", dsh); @@ -258,6 +316,7 @@ return AjaxResult.error("订单已取消,不允许操作。"); } shoppingOrder.setStatus(3); + shoppingOrder.setReceivingTime(LocalDateTime.now()); shoppingOrderService.updateById(shoppingOrder); return AjaxResult.success(); } @@ -273,15 +332,11 @@ * 商城订单取消微信退款回调 */ @PostMapping("/cancelShoppingOrderWxRefund") - public void cancelShoppingOrderWxRefund(HttpServletRequest request) { -// WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); -// if (null != data) { -// String out_refund_no = data.getOut_refund_no(); -// String refund_id = data.getRefund_id(); -// String tradeState = data.getTradeState(); -// String success_time = data.getSuccess_time(); -// shoppingOrderService.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time); -// } + public void cancelShoppingOrderWxRefund(@RequestParam("out_refund_no") String out_refund_no, + @RequestParam("refund_id") String refund_id, + @RequestParam("tradeState") String tradeState, + @RequestParam("success_time") String success_time) { + shoppingOrderService.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java index 16b02cc..e174a7d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TVipOrderController.java @@ -70,8 +70,14 @@ @PostMapping("/addVipOrder") @ApiOperation(value = "添加会员订单", tags = {"管理后台-会员订单"}) public R<Long> addVipOrder(@RequestBody TVipOrder dto) { - List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()).list(); - if (!list.isEmpty())return R.fail("订单编号已存在"); + if (dto.getId()!=null){ + List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()) + .ne(TVipOrder::getId, dto.getId()).list(); + if (!list.isEmpty())return R.fail("订单编号已存在"); + }else{ + List<TVipOrder> list = vipOrderService.lambdaQuery().eq(TVipOrder::getCode, dto.getCode()).list(); + if (!list.isEmpty())return R.fail("订单编号已存在"); + } vipOrderService.saveOrUpdate(dto); return R.ok(dto.getId()); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index a319ff3..4f4c9a1 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -183,6 +183,9 @@ @Resource private AppUserTagClient appUserTagClient; + + @Resource + private SecurityDetectionClient securityDetectionClient; //计数器 private Map<String, Integer> counter_map = new HashMap<>(); @@ -643,6 +646,19 @@ //执行5分钟的定时任务检测 ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(()->{ + //获取安全校验 + SecurityDetection securityDetection = securityDetectionClient.getSecurityDetection(chargingOrder.getCode()).getData(); + if(null != securityDetection){ + PreChargeCheck preChargeCheck1 = redisService.getCacheObject("AQJC_" + chargingOrder.getChargingGunId()); + if(null != preChargeCheck1){ + preChargeCheck1.setElectronicLockLock(preChargeCheck1.getElectronicLockLock()); + preChargeCheck1.setInsulationTesting(true); + preChargeCheck1.setSecureConnectionDetection(preChargeCheck1.getSecureConnectionDetection()); + preChargeCheck1.setStartupSuccess(1); + redisService.setCacheObject("AQJC_" + chargingOrder.getChargingGunId(), preChargeCheck1); + } + } + List<PlatformStartChargingReply> data = platformStartChargingReplyClient.getPlatformStartChargingReply(code).getData(); System.err.println("-------------------开始检查调起充电结果-------------------"); System.err.println(data.toString()); @@ -652,10 +668,9 @@ Integer failure_cause = platformStartChargingReply.getFailure_cause(); Integer counter = counter_map.get(code); PreChargeCheck preChargeCheck1 = redisService.getCacheObject(key); - //状态为5的时候,硬件会间隔60秒后再次检测,依然未插枪,则不启动充电 - //因这里是间隔5秒执行检测,所以累计次数在30次以上 - if(failure_cause == 5 && (null == counter || counter < 35)){ - counter++; + //5分钟内还未插枪则取消充电,退回金额。 + if(failure_cause == 5 && (null == counter || counter < 300)){ + counter = (null == counter ? 0 : counter) + 1; counter_map.put(code, counter); //启动失败 preChargeCheck1.setStartupSuccess(3); @@ -663,9 +678,9 @@ redisService.setCacheObject(key, preChargeCheck1); return; } + //清除计时器中的无效数据 counter_map.remove(code); - //开始处理退款 TChargingOrder order = this.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getCode, code)); if(0 == startup_result){ //启动失败 @@ -676,6 +691,7 @@ order.setStatus(-1); order.setEndMode(0); }else{ + //启动成功 preChargeCheck1.setStartupSuccess(2); order.setStatus(3); order.setStartTime(LocalDateTime.now()); @@ -684,8 +700,10 @@ redisService.setCacheObject(key, preChargeCheck1); //提前结束定时任务 scheduler.shutdown(); + }else{ + log.error("未上传开启充电结果........"); } - }, 5, 300, TimeUnit.SECONDS); + }, 5, 1, TimeUnit.SECONDS); return AjaxResult.success(); } @@ -939,6 +957,9 @@ throw new RuntimeException(failure_cause); } + // 将枪状态重置为空闲 + chargingGun.setStatus(2); + chargingGunClient.updateChargingGunById(chargingGun); //计算费用,处理退款 endCharge(chargingOrder); break; @@ -1198,6 +1219,12 @@ for (ChargingOrderVO chargingOrderVO : list) { TChargingGun data3 = chargingGunClient.getChargingGunById(chargingOrderVO.getChargingGunId()).getData(); TChargingPile data2 = chargingPileClient.getChargingPileById(chargingOrderVO.getChargingPileId()).getData(); + if (chargingOrderVO.getSiteId()!=null){ + List<Integer> integers = new ArrayList<>(); + integers.add(chargingOrderVO.getSiteId()); + List<Site> data = siteClient.getSiteByIds(integers).getData(); + if (!data.isEmpty())chargingOrderVO.setSiteName(data.get(0).getName()); + } if (data2!=null && data3!=null){ chargingOrderVO.setTerminalName(data2.getName()+"-"+data3.getName()); @@ -1213,7 +1240,9 @@ // 单个订单累计服务费 BigDecimal serviceMoney1 = new BigDecimal("0"); UploadRealTimeMonitoringData data5 = uploadRealTimeMonitoringDataClient.chargingOrderInfo(chargingOrderVO.getCode()).getData(); - chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L); + if (data5!=null){ + chargingOrderVO.setChargingSecond(data5.getTime_remaining()*60L); + } // 总收入 if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){ income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount())); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java index 7c04428..221c46f 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java @@ -115,7 +115,7 @@ @Override public List<TEvaluationTagVO> getTagCount() { // 查询标签列表 - R<List<TEvaluationTagVO>> r = evaluationTagClient.getTagList(null); + R<List<TEvaluationTagVO>> r = evaluationTagClient.getList(); List<TEvaluationTagVO> tagList = r.getData(); List<Integer> tagIds = tagList.stream().map(TEvaluationTagVO::getId).collect(Collectors.toList()); // 统计标签使用数量 diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java index 9e9a60e..38cd013 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderInvoiceServiceImpl.java @@ -119,13 +119,17 @@ } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String code = Double.valueOf(Math.random() * 1000).intValue() + sdf.format(new Date()); + //获取开票类型 + TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); + addOrderInvoice.setInvoicingCompany(invoiceType.getInvoicingCompany()); + addOrderInvoice.setInvoiceType(invoiceType.getName()); + addOrderInvoice.setInvoiceMaterial(2); + addOrderInvoice.setInvoicingMethod(invoiceType.getInvoicingMethod()); addOrderInvoice.setAppUserId(userId); addOrderInvoice.setCode(code); addOrderInvoice.setStatus(1); addOrderInvoice.setCreateTime(LocalDateTime.now()); this.save(addOrderInvoice); - //获取开票类型 - TInvoiceType invoiceType = invoiceTypeClient.getInvoiceType(addOrderInvoice.getInvoiceTypeId()).getData(); for (Long orderId : orderIds) { List<TChargingOrderAccountingStrategy> list = chargingOrderAccountingStrategyService.list(new LambdaQueryWrapper<TChargingOrderAccountingStrategy>() .eq(TChargingOrderAccountingStrategy::getChargingOrderId, orderId)); @@ -263,31 +267,37 @@ List<TOrderInvoiceVO> list = this.baseMapper.pageList(query,pageInfo); for (TOrderInvoiceVO tOrderInvoiceVO : list) { tOrderInvoiceVO.setUid(tOrderInvoiceVO.getId().toString()); - List<Long> collect = orderInvoiceDetailService.lambdaQuery().eq(TOrderInvoiceDetail::getOrderInvoiceId, tOrderInvoiceVO.getId()) - .eq(TOrderInvoiceDetail::getOrderType, 1).list().stream() + List<Long> collect = orderInvoiceDetailService.lambdaQuery().eq(TOrderInvoiceDetail::getOrderInvoiceId, tOrderInvoiceVO.getId()).list().stream() .map(TOrderInvoiceDetail::getOrderId).collect(Collectors.toList()); // 将其全部转化为String tOrderInvoiceVO.setIds(collect.stream().map(String::valueOf).collect(Collectors.toList())); } // 查询这个开票的订单ids - List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList()); + if (!list.isEmpty()){ + List<Long> ids = list.stream().map(TOrderInvoiceVO::getId).collect(Collectors.toList()); - List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>() - .in(TOrderInvoiceDetail::getOrderInvoiceId, ids)); + List<TOrderInvoiceDetail> orderInvoiceDetailList = orderInvoiceDetailService.list(new LambdaQueryWrapper<TOrderInvoiceDetail>() + .in(TOrderInvoiceDetail::getOrderInvoiceId, ids)); - List<TAppUser> finalTAppUsers = tAppUsers; - list.forEach(e->{ - e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff()); - e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff()); - e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff()); - e.setAddedService(orderInvoiceDetailList.stream().filter(t->t.getAddedService()!=null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get()); - e.setElectrovalence(orderInvoiceDetailList.stream().filter(t->t.getElectrovalence()!=null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get()); - e.setServiceCharge(orderInvoiceDetailList.stream().filter(t->t.getServiceCharge()!=null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get()); - if (e.getBillingUserId()!=null){ - e.setUserPhone(finalTAppUsers.stream().filter(t->t.getId()!=null).filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone()); - } - }); + List<TAppUser> finalTAppUsers = tAppUsers; + list.forEach(e->{ + if (e.getOrderType()!=null&&e.getOrderType()==1){ + e.setServiceTariff(orderInvoiceDetailList.get(0).getServiceTariff()); + }else{ + e.setServiceTariff(new BigDecimal("0")); + } + e.setElectricityTariff(orderInvoiceDetailList.get(0).getElectricityTariff()); + e.setAddedServiceTariff(orderInvoiceDetailList.get(0).getAddedServiceTariff()); + e.setAddedService(orderInvoiceDetailList.stream().filter(t->t.getAddedService()!=null).map(TOrderInvoiceDetail::getAddedService).reduce(BigDecimal::add).get()); + e.setElectrovalence(orderInvoiceDetailList.stream().filter(t->t.getElectrovalence()!=null).map(TOrderInvoiceDetail::getElectrovalence).reduce(BigDecimal::add).get()); + e.setServiceCharge(orderInvoiceDetailList.stream().filter(t->t.getServiceCharge()!=null).map(TOrderInvoiceDetail::getServiceCharge).reduce(BigDecimal::add).get()); + if (e.getBillingUserId()!=null){ + e.setUserPhone(finalTAppUsers.stream().filter(t->t.getId()!=null).filter(m->m.getId().equals(Long.parseLong(e.getBillingUserId().toString()))).findFirst().get().getPhone()); + } + }); + } + pageInfo.setRecords(list); return pageInfo; diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java index 30d8358..1093912 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java @@ -202,7 +202,7 @@ public Map<String, Object> getMyShoppingOrderList(GetMyShoppingOrderList query) { Long userId = tokenService.getLoginUserApplet().getUserId(); LambdaQueryWrapper<TShoppingOrder> wrapper = new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0) - .eq(TShoppingOrder::getAppUserId, userId); + .eq(TShoppingOrder::getAppUserId, userId).eq(TShoppingOrder::getPaymentStatus, 2); if(query.getStatus() != 0){ wrapper.eq(TShoppingOrder::getStatus, query.getStatus()); } @@ -255,7 +255,7 @@ TAppUserAddress userAddress = appUserAddressClient.getAppUserAddressById(shoppingOrder.getAppUserAddressId()).getData(); info.setConsignee(userAddress.getName()); info.setPhone(userAddress.getPhone()); - info.setAddress(userAddress.getAddress()); + info.setAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getAddress()); info.setExpressCompany(shoppingOrder.getExpressCompany()); info.setExpressNumber(shoppingOrder.getExpressNumber()); String name = ""; @@ -364,6 +364,9 @@ shoppingOrderRefund.setRefundRemark("全额退款"); shoppingOrderRefund.setRefundTotalAmount(refundAmount.add(bigDecimal)); shoppingOrderRefund.setPayAmount(shoppingOrder.getPaymentAmount()); + + shoppingOrder.setCancellationTime(LocalDateTime.now()); + shoppingOrder.setCancellationId(shoppingOrder.getAppUserId()); if(1 == paymentType){ WxPaymentRefundModel model = new WxPaymentRefundModel(); model.setOut_trade_no(shoppingOrder.getCode()); @@ -378,6 +381,7 @@ model.setAmount(amount); R<String> orderR = wxPaymentClient.refundOrderR(model); if(200 == orderR.getCode()){ + this.updateById(shoppingOrder); shoppingOrderRefundService.save(shoppingOrderRefund); } } @@ -389,49 +393,9 @@ dto.setRefundReason("取消订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ + this.updateById(shoppingOrder); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); AjaxResult success = cancelShoppingOrderWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); - if(success.isSuccess()){ - shoppingOrderRefundService.save(shoppingOrderRefund); - //商品 - if(shoppingOrder.getOrderType() == 1){ - //redis锁 和支付使用同一个锁 - RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_GOODS_LOCK", 5, 30000); - try { - redisLock.lock(); - TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData(); - Integer inventory = goods.getInventory(); - if(-1 != inventory){ - goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity()); - goodsClient.updateGoods(goods); - } - }catch (Exception e){ - e.printStackTrace(); - }finally { - //解锁 - redisLock.unlock(); - } - } - //优惠券 - if(shoppingOrder.getOrderType() == 2){ - //redis锁 和支付使用同一个锁 - RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_COUPON_LOCK", 5, 30000); - try { - redisLock.lock(); - TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData(); - Integer inventory = coupon.getInventoryQuantity(); - if(-1 != inventory){ - coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity()); - couponClient.updateCoupon(coupon); - } - }catch (Exception e){ - e.printStackTrace(); - }finally { - //解锁 - redisLock.unlock(); - } - } - } } } return AjaxResult.success(); @@ -457,6 +421,13 @@ shoppingOrderRefundService.updateById(one); //判断是否需要回退库存 TShoppingOrder shoppingOrder = this.getById(one.getShoppingOrderId()); + shoppingOrder.setStatus(4); + shoppingOrder.setRefundCode(one.getRefundSerialNumber()); + shoppingOrder.setRefundAmount(one.getRefundAmount()); + shoppingOrder.setRefundStatus(2); + shoppingOrder.setRefundTime(one.getRefundTime()); + this.updateById(shoppingOrder); + //商品 if(shoppingOrder.getOrderType() == 1){ //redis锁 和支付使用同一个锁 diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java index 0ed6754..23aeefd 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TVipOrderServiceImpl.java @@ -54,10 +54,14 @@ tVipOrder.setUid(tVipOrder.getId().toString()); tVipOrder.setUserUid(tVipOrder.getAppUserId().toString()); TVip data = vipClient.getInfo(tVipOrder.getVipId()).getData(); - if (data!=null){ tVipOrder.setName(data.getName()); } + if (StringUtils.hasLength(tVipOrder.getTitle())) + { + // 去除最后两个字符 + tVipOrder.setName(tVipOrder.getTitle().substring(0, tVipOrder.getTitle().length() - 2)); + } TAppUser data1 = appUserClient.getUserById(tVipOrder.getAppUserId()).getData(); if (data1!=null)tVipOrder.setUserPhone(data1.getPhone()); } diff --git a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml index a49dc2a..917dd7a 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-order/src/main/resources/bootstrap.yml @@ -13,6 +13,7 @@ profiles: # 环境配置 active: dev +# active: prod --- spring: config: @@ -28,6 +29,7 @@ namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb username: nacos password: nacos + ip: 192.168.110.85 config: # 配置中心地址 server-addr: 192.168.110.169:8848 diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml index 110c1fc..abb234b 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml @@ -62,7 +62,7 @@ </if> </select> <select id="getNoInvoicedOrder" resultMap="BaseResultMap"> - select * from t_charging_order where del_flag = 0 and app_user_id = #{appUserId} + select * from t_charging_order where del_flag = 0 and status = 5 and recharge_payment_status = 2 and payment_amount is null and app_user_id = #{appUserId} <if test="null != month and '' != month"> and DATE_FORMAT(end_time, '%Y-%m') = #{month} </if> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TExchangeOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TExchangeOrderMapper.xml index 9ca7ee5..2cad0b5 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TExchangeOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TExchangeOrderMapper.xml @@ -37,28 +37,39 @@ <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') </if> + <if test="null != req.status"> + and t1.status = #{req.status} + </if> <if test="null != req.userIds and req.userIds.size()>0" > and t1.app_user_id in <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </if> - <if test="null != req.couponIds and req.couponIds.size()>0 or null != req.couponIds and req.couponIds.size()>0" > - and (t1.goods_id in - <foreach collection="req.goodsIds" item="item" index="index" separator="," open="(" close=")"> + <if test="null != req.userIds and req.userIds.size()>0" > + and t1.app_user_id in + <foreach collection="req.userIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> - or + </if> + + <if test="null != req.couponIds and req.couponIds.size()>0" > and t1.coupon_id in <foreach collection="req.couponIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> - ) + </if> + <if test="null != req.goodsIds and req.goodsIds.size()>0" > + and t1.goods_id in + <foreach collection="req.goodsIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.create_time between #{startTime1} and #{startTime2} + and (t1.create_time between #{startTime1} and #{startTime2}) </if> AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} + order by t1.create_time desc </select> </mapper> diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml index 3315e9d..6144472 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TShoppingOrderMapper.xml @@ -214,7 +214,7 @@ <select id="getNoInvoicedOrder" resultMap="BaseResultMap"> - select * from t_shopping_order where del_flag = 0 and app_user_id = #{appUserId} + select * from t_shopping_order where del_flag = 0 and payment_status = 2 and status = 3 and app_user_id = #{appUserId} <if test="null != month and '' != month"> and DATE_FORMAT(create_time, '%Y-%m') = #{month} </if> @@ -227,9 +227,12 @@ <select id="pageList" resultType="com.ruoyi.order.api.model.TShoppingOrder"> select t1.* from t_shopping_order t1 - where 1=1 + where 1 = 1 <if test="null != req.code and req.code!=''"> and t1.code LIKE CONCAT('%',#{req.code},'%') + </if> + <if test="null != req.status"> + and t1.status = #{req.status} </if> <if test="null != req.userIds and req.userIds.size()>0" > and t1.app_user_id in @@ -238,20 +241,20 @@ </foreach> </if> - <if test="null != req.couponIds and req.couponIds.size()>0 or null != req.couponIds and req.couponIds.size()>0" > - and (t1.goods_id in - <foreach collection="req.goodsIds" item="item" index="index" separator="," open="(" close=")"> - #{item} - </foreach> - or + <if test="null != req.couponIds and req.couponIds.size()>0" > and t1.coupon_id in <foreach collection="req.couponIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> - ) + </if> + <if test="null != req.goodsIds and req.goodsIds.size()>0" > + and t1.goods_id in + <foreach collection="req.goodsIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.create_time between #{startTime1} and #{startTime2} + and (t1.create_time between #{startTime1} and #{startTime2}) </if> and t1.payment_status = 2 AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} diff --git a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml index 1c91b21..979c301 100644 --- a/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml +++ b/ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TVipOrderMapper.xml @@ -42,7 +42,7 @@ and t1.vip_id = #{req.vipId} </if> <if test="startTime1 != null and startTime1!=''"> - and (t1.create_time between #{startTime1} and #{startTime2} + and t1.create_time between #{startTime1} and #{startTime2} </if> and t1.payment_status = 2 AND t1.del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java index 0feffa7..c279c78 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TAdvertisingController.java @@ -1,6 +1,7 @@ package com.ruoyi.other.controller; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.core.enums.status.AdvertisingStatusEnum; import com.ruoyi.common.core.web.domain.AjaxResult; @@ -17,10 +18,23 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.SecureRandom; +import java.text.SimpleDateFormat; +import java.util.*; /** * <p> @@ -54,7 +68,16 @@ @ApiOperation(tags = {"管理后台-广告管理"},value = "广告修改") @Log(title = "【广告管理】修改广告", businessType = BusinessType.UPDATE,operatorType = OperatorType.MANAGE) public AjaxResult updateVip(@RequestBody TAdvertising dto) { - advertisingService.updateById(dto); + if (dto.getJumpType() == 2){ + // 清空跳转地址 + advertisingService.updateById(dto); + LambdaUpdateWrapper<TAdvertising> tAdvertisingLambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + tAdvertisingLambdaUpdateWrapper.eq(TAdvertising::getId,dto.getId()) + .set(TAdvertising::getJumpUrl,null); + advertisingService.update(tAdvertisingLambdaUpdateWrapper); + }else{ + advertisingService.updateById(dto); + } return AjaxResult.success(); } @GetMapping("/getInfo") @@ -76,7 +99,9 @@ public AjaxResult<List<TAdvertising>> list(@RequestParam("position") Integer position) { return AjaxResult.ok(advertisingService.list(Wrappers.lambdaQuery(TAdvertising.class) .eq(TAdvertising::getStatus, AdvertisingStatusEnum.YES.getCode()) - .eq(TAdvertising::getPosition,position))); + .eq(TAdvertising::getPosition,position) + .le(TAdvertising::getStartTime, LocalDateTime.now()) + .ge(TAdvertising::getEndTime,LocalDateTime.now()))); } } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java index 7082fe9..2d7e91c 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java @@ -43,7 +43,11 @@ public R<List<TEvaluationTagVO>> getTagList(@RequestParam("type") Integer type) { return R.ok(evaluationTagService.getTagList(type)); } - + @GetMapping("/getList") + public R<List<TEvaluationTagVO>> getList() { + return R.ok(evaluationTagService.getList()); + } + @ResponseBody diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java index 5a71975..a18d471 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/TEvaluationTagMapper.java @@ -32,4 +32,11 @@ * @return */ List<TEvaluationTag> pageList(PageInfo<TEvaluationTag> pageInfo, @Param("name") String name); + + /** + * 获取列表数据 + * @return + */ + List<TEvaluationTagVO> getList(); + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java index 0a1555d..52dbb63 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/TEvaluationTagService.java @@ -32,4 +32,10 @@ * @return */ PageInfo<TEvaluationTag> pageList(String name, BasePage basePage); + /** + * 查询标签列表 + * @return + */ + List<TEvaluationTagVO> getList(); + } diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TCouponServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TCouponServiceImpl.java index 9b29460..c08b27b 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TCouponServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TCouponServiceImpl.java @@ -34,6 +34,13 @@ StringBuilder couponIds = new StringBuilder(); for (TCoupon tCoupon : list) { couponIds.append(tCoupon.getId()).append(","); + // 如果优惠券库存为0 那么将优惠券状态改为下架 不启用 + if (tCoupon.getInventoryQuantity()==0){ + tCoupon.setStatus(2); + this.baseMapper.updateById(tCoupon); + + } + } if (!list.isEmpty()){ if (StringUtils.hasLength(couponIds)){ diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java index 38bccd5..06cd8a2 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TEvaluationTagServiceImpl.java @@ -40,4 +40,9 @@ List<TEvaluationTag> list = this.baseMapper.pageList(pageInfo, name); return pageInfo.setRecords(list); } + + @Override + public List<TEvaluationTagVO> getList() { + return this.baseMapper.getList(); + } } diff --git a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml index 2c4088c..382af35 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-other/src/main/resources/bootstrap.yml @@ -13,6 +13,7 @@ profiles: # 环境配置 active: dev +# active: prod --- spring: config: @@ -28,6 +29,7 @@ namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb username: nacos password: nacos + ip: 192.168.110.85 config: # 配置中心地址 server-addr: 192.168.110.169:8848 diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TEvaluationTagMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TEvaluationTagMapper.xml index db0ab29..67410dd 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TEvaluationTagMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TEvaluationTagMapper.xml @@ -33,4 +33,8 @@ </if> order by create_time desc </select> + <select id="getList" resultType="com.ruoyi.other.api.vo.TEvaluationTagVO"> + select <include refid="Base_Column_List"></include> + from t_evaluation_tag where del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} + </select> </mapper> diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml index 8cb9cb5..c8879ee 100644 --- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml +++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml @@ -46,7 +46,7 @@ AND inventory = 0 </if> <if test="req.otherState != null and req.otherState ==3"> - AND status = #{req.status} + AND status = 2 </if> AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()} </where> diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java index 7b6c42b..04048b4 100644 --- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java +++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/WxPayController.java @@ -5,6 +5,7 @@ import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.order.api.feignClient.ChargingOrderClient; import com.ruoyi.order.api.feignClient.OrderClient; +import com.ruoyi.order.api.feignClient.ShoppingOrderClient; import com.ruoyi.payment.api.vo.PaymentOrder; import com.ruoyi.payment.api.vo.WxRefundNotifyResp; import com.ruoyi.payment.wx.enums.RefundEnum; @@ -41,6 +42,9 @@ @Resource private ChargingOrderClient chargingOrderClient; + + @Resource + private ShoppingOrderClient shoppingOrderClient; @@ -191,11 +195,20 @@ if (tradeState.equals(RefundEnum.SUCCESS.name())) { String substring = out_refund_no.substring(0, 3); switch (substring){ - //购物订单 + //充电订单 case "CDF": chargingOrderClient.chargingOrderStartupFailureWxRefund(out_refund_no, refund_id, tradeState, success_time); System.err.println("----充电启动失败退款回调通知"); break; + case "GDF": + shoppingOrderClient.cancelShoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time); + System.err.println("----商城订单取消退款回调通知"); + break; + //充电订单 + case "GWF": + chargingOrderClient.shoppingOrderWxRefund(out_refund_no, refund_id, tradeState, success_time); + System.err.println("----管理后台取消购物订单退款回调通知"); + break; } WxRefundNotifyResp resp = new WxRefundNotifyResp(); diff --git a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml index c1e6944..3d1b30e 100644 --- a/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-payment/src/main/resources/bootstrap.yml @@ -12,7 +12,8 @@ allow-circular-references: true profiles: # 环境配置 - active: dev +# active: dev + active: prod --- spring: config: @@ -55,52 +56,52 @@ type: nacos nacos: # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - data-id: seata-server.properties - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # data-id: seata-server.properties # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + data-id: seata-server.properties + username: nacos + password: nacos registry: type: nacos nacos: application: seata-server # 开发环境 - server-addr: 192.168.110.169:8848 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb - group: DEFAULT_GROUP - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # group: DEFAULT_GROUP # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + username: nacos + password: nacos cloud: nacos: discovery: # 开发环境 - server-addr: 192.168.110.169:8848 # nacos注册中心地址 - namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 - group: DEFAULT_GROUP - application: seata-server #Nacos 中 Seata 名称 - username: nacos - password: nacos - # 生产环境 -# server-addr: 192.168.0.137:8848,192.168.0.123:8848 -# namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a +# server-addr: 192.168.110.169:8848 # nacos注册中心地址 +# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 # group: DEFAULT_GROUP # application: seata-server #Nacos 中 Seata 名称 # username: nacos # password: nacos + # 生产环境 + server-addr: 192.168.0.137:8848,192.168.0.123:8848 + namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a + group: DEFAULT_GROUP + application: seata-server #Nacos 中 Seata 名称 + username: nacos + password: nacos sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台地址 -- Gitblit v1.7.1