puzhibing
2024-08-16 731c3d326b6cc2e08e703f06d06aa453bc52cda3
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile
52个文件已修改
20个文件已添加
1642 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserAddressFallbackFactory.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserIntegralChangeFallbackFactory.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserAddressClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TCoupon.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponFallbackFactory.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsFallbackFactory.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/IntegralRuleFallbackFactory.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponClient.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysRoleClient.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserApplet.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserIntegralChangeController.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ExchangeOrderGoodsInfo.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetMyChargingOrderList.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetMyExchangeOrder.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/MyChargingOrderInfo.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/MyChargingOrderList.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/MyExchangeOrderList.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/OrderEvaluateVo.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TExchangeOrderService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TCouponMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserAddressFallbackFactory.java
New file
@@ -0,0 +1,33 @@
package com.ruoyi.account.api.factory;
import com.ruoyi.account.api.feignClient.AppUserAddressClient;
import com.ruoyi.account.api.model.TAppUserAddress;
import com.ruoyi.account.api.model.TAppUserIntegralChange;
import com.ruoyi.common.core.domain.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 11:02
 */
@Component
public class AppUserAddressFallbackFactory implements FallbackFactory<AppUserAddressClient> {
    private static final Logger log = LoggerFactory.getLogger(AppUserAddressFallbackFactory.class);
    @Override
    public AppUserAddressClient create(Throwable throwable) {
        log.error("用户地址调用失败:{}", throwable.getMessage());
        return new AppUserAddressClient(){
            @Override
            public R<TAppUserAddress> getAppUserAddressById(Long id) {
                return R.fail("根据id获取用户地址信息失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserIntegralChangeFallbackFactory.java
New file
@@ -0,0 +1,32 @@
package com.ruoyi.account.api.factory;
import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
import com.ruoyi.account.api.model.TAppUserIntegralChange;
import com.ruoyi.common.core.domain.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 11:02
 */
@Component
public class AppUserIntegralChangeFallbackFactory implements FallbackFactory<AppUserIntegralChangeClient> {
    private static final Logger log = LoggerFactory.getLogger(AppUserIntegralChangeFallbackFactory.class);
    @Override
    public AppUserIntegralChangeClient create(Throwable throwable) {
        log.error("账户积分变动调用失败:{}", throwable.getMessage());
        return new AppUserIntegralChangeClient(){
            @Override
            public R addAppUserIntegralChange(TAppUserIntegralChange appUserIntegralChange) {
                return R.fail("添加积分变动记录失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserAddressClient.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.account.api.feignClient;
import com.ruoyi.account.api.factory.AppUserAddressFallbackFactory;
import com.ruoyi.account.api.model.TAppUserAddress;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 14:47
 */
@FeignClient(contextId = "AppUserAddressClient", value = ServiceNameConstants.ACCOUNT_SERVICE, fallbackFactory = AppUserAddressFallbackFactory.class)
public interface AppUserAddressClient {
    /**
     * 根据id获取用户地址信息
     * @param id
     * @return
     */
    @PostMapping("/t-app-user-address/getAppUserAddressById")
    R<TAppUserAddress> getAppUserAddressById(Long id);
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -37,6 +37,11 @@
     * @param id
     * @return
     */
    @GetMapping(value = "/user/getUserById")
    @PostMapping(value = "/t-app-user/user/getUserById")
    R<TAppUser> getUserById(Long id);
    @PostMapping("/t-app-user/")
    R updateAppUser(TAppUser appUser);
}
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserIntegralChangeClient.java
New file
@@ -0,0 +1,20 @@
package com.ruoyi.account.api.feignClient;
import com.ruoyi.account.api.model.TAppUserIntegralChange;
import com.ruoyi.common.core.domain.R;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 11:01
 */
public interface AppUserIntegralChangeClient {
    /**
     * 添加积分变动记录
     * @param appUserIntegralChange
     * @return
     */
    @PostMapping("/t-app-user-integral-change/addAppUserIntegralChange")
    R addAppUserIntegralChange(TAppUserIntegralChange appUserIntegralChange);
}
ruoyi-api/ruoyi-api-account/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,5 @@
com.ruoyi.account.api.factory.AppUserFallbackFactory
com.ruoyi.account.api.factory.AppCouponFallbackFactory
com.ruoyi.account.api.factory.AppUserCarFallbackFactory
com.ruoyi.account.api.factory.AppUserIntegralChangeFallbackFactory
com.ruoyi.account.api.factory.AppUserAddressFallbackFactory
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/factory/ChargingGunFallbackFactory.java
New file
@@ -0,0 +1,41 @@
package com.ruoyi.chargingPile.api.factory;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.domain.R;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * 充电桩服务降级处理
 *
 * @author ruoyi
 */
@Component
public class ChargingGunFallbackFactory implements FallbackFactory<ChargingGunClient>
{
    private static final Logger log = LoggerFactory.getLogger(ChargingGunFallbackFactory.class);
    @Override
    public ChargingGunClient create(Throwable throwable) {
        log.error("充电枪调用失败:{}", throwable.getMessage());
        return new ChargingGunClient() {
            @Override
            public R<String> getAllName(Integer id) {
                return R.fail("根据id获取充电枪完整名称失败:" + throwable.getMessage());
            }
            @Override
            public R<TChargingGun> getChargingGunById(Integer id) {
                return R.fail("根据id获取充电枪失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ChargingGunClient.java
New file
@@ -0,0 +1,34 @@
package com.ruoyi.chargingPile.api.feignClient;
import com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @Date 2024/8/15 19:36
 */
@FeignClient(contextId = "ChargingGunClient", value = ServiceNameConstants.CHARGINGPILE_SERVICE, fallbackFactory = ChargingGunFallbackFactory.class)
public interface ChargingGunClient {
    /**
     * 根据id获取充电枪完整名称
     * @param id
     * @return
     */
    @PostMapping("/t-charging-gun/getAllName")
    R<String> getAllName(Integer id);
    /**
     * 根据id获取充电枪
     * @param id
     * @return
     */
    @PostMapping("/t-charging-gun/getChargingGunById")
    R<TChargingGun> getChargingGunById(Integer id);
}
ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/feignClient/ParkingLotClient.java
@@ -23,7 +23,7 @@
    /**
     * 通过站点id查询停车场信息
     */
    @GetMapping(value = "/t-parking-lot/getLotBySiteId")
    @PostMapping(value = "/t-parking-lot/getLotBySiteId")
    public R<TParkingLot> getLotBySiteId(@RequestParam("siteId") Integer siteId);
}
ruoyi-api/ruoyi-api-chargingPile/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,4 @@
com.ruoyi.chargingPile.api.factory.ChargingPileFallbackFactory
com.ruoyi.chargingPile.api.factory.SiteFallbackFactory
com.ruoyi.chargingPile.api.factory.ParkingLotFallbackFactory
com.ruoyi.chargingPile.api.factory.ChargingGunFallbackFactory
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderAccountingStrategyClient.java
@@ -6,6 +6,7 @@
import com.ruoyi.order.api.factory.ChargingOrderFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@@ -25,7 +26,7 @@
     * @param days 天数
     * @return
     */
    @GetMapping("/t-charging-order-accounting-strategy/getTotalElectricQuantity")
    @PostMapping("/t-charging-order-accounting-strategy/getTotalElectricQuantity")
    R<List<List<Map<String, Object>>>> getTotalElectricQuantity(Integer days, @RequestParam("siteIds") Set<Integer> siteIds);
    
    
@@ -34,6 +35,6 @@
     * @param days
     * @return
     */
    @GetMapping("/t-charging-order-getDailyChargingDegree-strategy/getUtilizationTrend")
    @PostMapping("/t-charging-order-getDailyChargingDegree-strategy/getUtilizationTrend")
    R<List<Double>> getDailyChargingDegree(Integer days, @RequestParam("siteIds") Set<Integer> siteIds);
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/feignClient/ChargingOrderClient.java
@@ -37,6 +37,6 @@
     * @param chargingGunId 充电枪id
     * @return
     */
    @GetMapping(value = "/t-charging-order/getOrderDetailByGunId")
    @PostMapping(value = "/t-charging-order/getOrderDetailByGunId")
    R<TChargingOrder> getOrderDetailByGunId(@RequestParam("chargingGunId") Integer chargingGunId);
}
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TChargingOrder.java
@@ -89,6 +89,10 @@
    @ApiModelProperty(value = "状态(0=未知,1=等待中,2=启动中,3=充电中,4=停止中,5=已结束)")
    @TableField("status")
    private Integer status;
    @ApiModelProperty(value = "结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)")
    @TableField("end_mode")
    private Integer endMode;
    @ApiModelProperty(value = "充值金额")
    @TableField("recharge_amount")
ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/model/TOrderAppeal.java
@@ -28,7 +28,7 @@
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "主键")
    @TableId(value = "id", type = IdType.AUTO)
    @TableId(value = "id", type = IdType.NONE)
    private Long id;
    @ApiModelProperty(value = "订单类型(1=充电订单,2=购物订单,3=兑换订单,4=会员订单)")
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/TCoupon.java
@@ -39,6 +39,14 @@
    @TableField("name")
    private String name;
    @ApiModelProperty(value = "封面图")
    @TableField("cover_picture")
    private String coverPicture;
    @ApiModelProperty(value = "详情图片")
    @TableField("details_picture")
    private String detailsPicture;
    @ApiModelProperty(value = "优惠方式(1=满减,2=抵扣)")
    @TableField("preferential_mode")
    private Integer preferentialMode;
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/CouponFallbackFactory.java
New file
@@ -0,0 +1,34 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TGoods;
import com.ruoyi.other.api.feignClient.CouponClient;
import com.ruoyi.other.api.feignClient.GoodsClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 13:48
 */
@Component
public class CouponFallbackFactory implements FallbackFactory<CouponClient> {
    private static final Logger log = LoggerFactory.getLogger(CouponFallbackFactory.class);
    @Override
    public CouponClient create(Throwable throwable) {
        log.error("优惠券调用失败:{}", throwable.getMessage());
        return new CouponClient() {
            @Override
            public R<TCoupon> getCouponById(Integer id) {
                return R.fail("根据id获取优惠券信息失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/GoodsFallbackFactory.java
New file
@@ -0,0 +1,32 @@
package com.ruoyi.other.api.factory;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TGoods;
import com.ruoyi.other.api.feignClient.GoodsClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 13:48
 */
@Component
public class GoodsFallbackFactory implements FallbackFactory<GoodsClient> {
    private static final Logger log = LoggerFactory.getLogger(GoodsFallbackFactory.class);
    @Override
    public GoodsClient create(Throwable throwable) {
        log.error("商品调用失败:{}", throwable.getMessage());
        return new GoodsClient() {
            @Override
            public R<TGoods> getGoodsById(Integer id) {
                return R.fail("根据id获取商品信息失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/factory/IntegralRuleFallbackFactory.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.other.api.factory;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.api.dto.TagListQueryDto;
import com.ruoyi.account.api.dto.UnitListQueryDto;
import com.ruoyi.account.api.vo.CouponListVOVO;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TCompany;
import com.ruoyi.other.api.domain.TIntegralRule;
import com.ruoyi.other.api.domain.TUserTag;
import com.ruoyi.other.api.feignClient.IntegralRuleClient;
import com.ruoyi.other.api.feignClient.OtherClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
 * 商品服务降级处理
 *
 * @author ruoyi
 */
@Component
public class IntegralRuleFallbackFactory implements FallbackFactory<IntegralRuleClient>
{
    private static final Logger log = LoggerFactory.getLogger(IntegralRuleFallbackFactory.class);
    @Override
    public IntegralRuleClient create(Throwable throwable) {
        log.error("积分规则调用失败:{}", throwable.getMessage());
        return new IntegralRuleClient() {
            @Override
            public R<TIntegralRule> getSet() {
                return R.fail("获取积分设置失败:" + throwable.getMessage());
            }
        };
    }
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/CouponClient.java
New file
@@ -0,0 +1,26 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.factory.CouponFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 14:00
 */
@FeignClient(contextId = "CouponClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = CouponFallbackFactory.class)
public interface CouponClient {
    /**
     * 根据id获取优惠券信息
     * @param id
     * @return
     */
    @PostMapping("/t-coupon/getCouponById")
    R<TCoupon> getCouponById(Integer id);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/GoodsClient.java
New file
@@ -0,0 +1,25 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TGoods;
import com.ruoyi.other.api.factory.GoodsFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 13:47
 */
@FeignClient(contextId = "GoodsClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = GoodsFallbackFactory.class)
public interface GoodsClient {
    /**
     * 根据id获取商品信息
     * @param id
     * @return
     */
    @PostMapping("/t-goods/getGoodsById")
    R<TGoods> getGoodsById(Integer id);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/IntegralRuleClient.java
New file
@@ -0,0 +1,24 @@
package com.ruoyi.other.api.feignClient;
import com.ruoyi.common.core.constant.ServiceNameConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.other.api.domain.TIntegralRule;
import com.ruoyi.other.api.factory.IntegralRuleFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 10:54
 */
@FeignClient(contextId = "IntegralRuleClient", value = ServiceNameConstants.OTHER_SERVICE, fallbackFactory = IntegralRuleFallbackFactory.class)
public interface IntegralRuleClient {
    /**
     * 获取积分设置
     * @return
     */
    @PostMapping("/integral/getSet")
    R<TIntegralRule> getSet();
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/RoleSiteClient.java
@@ -26,7 +26,7 @@
     * @param roleId
     * @return
     */
    @GetMapping("/t-role-site/getSiteIds")
    @PostMapping("/t-role-site/getSiteIds")
    R<List<Integer>> getSiteIds(Long roleId);
    
    
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/TEvaluationTagClient.java
@@ -33,6 +33,6 @@
     * @param tagIds
     * @return
     */
    @GetMapping("/t-evaluation-tag/getListByIds")
    @PostMapping("/t-evaluation-tag/getListByIds")
    R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds);
}
ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/feignClient/UserSiteClient.java
@@ -26,7 +26,7 @@
     * @param userId
     * @return
     */
    @GetMapping("/t-user-site/getSiteIds")
    @PostMapping("/t-user-site/getSiteIds")
    R<List<Integer>> getSiteIds(Long userId);
    
    
ruoyi-api/ruoyi-api-other/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -3,3 +3,4 @@
com.ruoyi.other.api.factory.RoleSiteFallbackFactory
com.ruoyi.other.api.factory.TEvaluationTagFallbackFactory
com.ruoyi.other.api.factory.VipFallbackFactory
com.ruoyi.other.api.factory.IntegralRuleFallbackFactory
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysRoleClient.java
@@ -7,6 +7,7 @@
import com.ruoyi.system.api.model.GetSysRoleByIds;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
@@ -17,7 +18,7 @@
@FeignClient(contextId = "SysRoleClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysRoleFallbackFactory.class)
public interface SysRoleClient {
    
    @GetMapping("/role/getSysRoleByIds")
    @PostMapping("/role/getSysRoleByIds")
    public R<List<SysRole>> getSysRoleByIds(GetSysRoleByIds ids);
}
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/SysUserClient.java
@@ -51,7 +51,7 @@
     * @param userId
     * @return
     */
    @GetMapping("/user/queryRoleByUserId/{userId}")
    @PostMapping("/user/queryRoleByUserId/{userId}")
    R<SysRole>  queryRoleByUserId(@PathVariable("userId") Long userId);
@@ -60,7 +60,7 @@
     * @param roleId
     * @return
     */
    @GetMapping("/user/queryRoleByRoleId/{roleId}")
    @PostMapping("/user/queryRoleByRoleId/{roleId}")
    R<SysRole>  queryRoleByRoleId(@PathVariable("roleId") Long roleId);
    /**
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserApplet.java
New file
@@ -0,0 +1,51 @@
package com.ruoyi.system.api.model;
import lombok.Data;
import java.io.Serializable;
/**
 * 用户信息 小程序登录使用
 *
 * @author 无关风月
 */
@Data
public class LoginUserApplet implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 用户唯一标识
     */
    private String token;
    /**
     * 用户姓名
     */
    private String name;
    /**
     * 用户名id
     */
    private Integer userid;
    /**
     * 用户名
     */
    private String phone;
    /**
     * 登录时间
     */
    private Long loginTime;
    /**
     * 过期时间
     */
    private Long expireTime;
    /**
     * 登录IP地址
     */
    private String ipaddr;
}
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
@@ -36,6 +36,10 @@
     * 用户标识
     */
    public static final String USER_KEY = "user_key";
    /**
     * 小程序登录用户标识
     */
    public static final String USER_APPLET_KEY = "user_applet_key";
    /**
     * 登录用户
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
@@ -64,6 +64,17 @@
    }
    /**
     * 小程序根据令牌获取用户标识
     *
     * @param token 令牌
     * @return 用户ID
     */
    public static String getUserKeyApplet(String token)
    {
        Claims claims = parseToken(token);
        return getValue(claims, SecurityConstants.USER_APPLET_KEY);
    }
    /**
     * 根据令牌获取用户ID
     * 
     * @param token 令牌
@@ -75,6 +86,7 @@
        return getValue(claims, SecurityConstants.DETAILS_USER_ID);
    }
    /**
     * 根据身份信息获取用户ID
     * 
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -4,6 +4,8 @@
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import com.ruoyi.system.api.model.LoginUserApplet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.core.constant.CacheConstants;
@@ -64,7 +66,53 @@
        rspMap.put("expires_in", expireTime);
        return rspMap;
    }
    /**
     * 创建小程序令牌
     */
    public Map<String, Object> createTokenApplet(LoginUserApplet loginUser) {
        String token = IdUtils.fastUUID();
        Integer userId = loginUser.getUserid();
        String name = loginUser.getName();
        loginUser.setToken(token);
        loginUser.setIpaddr(IpUtils.getIpAddr());
        refreshToken1(loginUser);
        // Jwt存储信息
        Map<String, Object> claimsMap = new HashMap<String, Object>();
        claimsMap.put(SecurityConstants.USER_APPLET_KEY, token);
        claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
        claimsMap.put(SecurityConstants.DETAILS_USERNAME, name);
        // 接口返回信息
        Map<String, Object> rspMap = new HashMap<String, Object>();
        rspMap.put("access_token", JwtUtils.createToken(claimsMap));
        rspMap.put("expires_in", expireTime);
        return rspMap;
    }
    public LoginUserApplet getLoginUserApplet() {
        return getLoginUserAppletToken(ServletUtils.getRequest());
    }
    public LoginUserApplet getLoginUserAppletToken(HttpServletRequest request) {
        // 获取请求携带的令牌
        String token = SecurityUtils.getToken(request);
        return getLoginUserApplet(token);
    }
    /**
     * 小程序 获取用户身份信息
     *
     * @return 用户信息
     */
    public LoginUserApplet getLoginUserApplet(String token) {
        LoginUserApplet user = null;
        try {
            if (StringUtils.isNotEmpty(token)) {
                String userkey = JwtUtils.getUserKeyApplet(token);
                user = redisService.getCacheObject(getTokenKey(userkey));
                return user;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }
    /**
     * 获取用户身份信息
     *
@@ -161,7 +209,13 @@
        String userKey = getTokenKey(loginUser.getToken());
        redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
    }
    public void refreshToken1(LoginUserApplet dto) {
        dto.setLoginTime(System.currentTimeMillis());
        dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE);
        // 根据uuid将loginUser缓存
        String userKey = getTokenKey(dto.getToken());
        redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES);
    }
    private String getTokenKey(String token)
    {
        return ACCESS_TOKEN + token;
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -595,7 +595,7 @@
     * @param userId
     * @return
     */
    @GetMapping("/queryRoleByUserId/{userId}")
    @PostMapping("/queryRoleByUserId/{userId}")
    public R<SysRole> queryRoleByUserId(@PathVariable("userId") Long userId){
        SysUserRole one = sysUserRoleService.getOne(Wrappers.lambdaQuery(SysUserRole.class)
                .eq(SysUserRole::getUserId, userId)
@@ -611,7 +611,7 @@
    }
    @GetMapping("/queryRoleByRoleId/{roleId}")
    @PostMapping("/queryRoleByRoleId/{roleId}")
    public R<SysRole> queryRoleByRoleId(@PathVariable("roleId") Long roleId){
        return R.ok( roleService.getOne(Wrappers.lambdaQuery(SysRole.class)
                .eq(SysRole::getRoleId, roleId)
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppCouponController.java
@@ -5,10 +5,13 @@
import com.ruoyi.account.api.dto.CouponListDto;
import com.ruoyi.account.api.dto.GrantCouponDto;
import com.ruoyi.account.api.model.TAppCoupon;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.account.api.query.ExchangeRecordGoodsQuery;
import com.ruoyi.account.api.vo.CarListVO;
import com.ruoyi.account.api.vo.CouponListVOVO;
import com.ruoyi.account.api.vo.ExchangeRecordVO;
import com.ruoyi.account.service.TAppCouponService;
import com.ruoyi.account.service.TAppUserCarService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.BasePage;
@@ -43,6 +46,8 @@
    @Autowired
    private OtherClient otherClient;
    @Autowired
    private TAppUserCarService appUserCarService;
    /**
     * 查询用户可用优惠券数量
     * @param dto
@@ -55,14 +60,16 @@
        return AjaxResult.ok(res);
    }
    /**
     *
     * @param dto
     * 选择车辆列表
     * @return
     */
    @ApiOperation(value = "选择车辆列表", tags = {"小程序-扫一扫"})
    @PostMapping(value = "/scan/carList")
    public AjaxResult<CouponListVOVO> carList(@RequestBody CouponListDto dto) {
        return AjaxResult.success();
    public AjaxResult<List<TAppUserCar>> carList() {
        // todo 用户id
        List<TAppUserCar> appUserId = appUserCarService.list(new QueryWrapper<TAppUserCar>()
                .eq("app_user_id", 11));
        return AjaxResult.ok(appUserId);
    }
    /**
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.account.api.model.TAppUserAddress;
import com.ruoyi.account.service.TAppUserAddressService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -73,5 +74,17 @@
        return AjaxResult.ok(appUserAddressService.removeById(id));
    }
    /**
     * 根据id获取地址信息
     * @param id
     * @return
     */
    @PostMapping(value = "/getAppUserAddressById/{id}")
    public R<TAppUserAddress> getAppUserAddressById(@PathVariable Long id){
        TAppUserAddress userAddress = appUserAddressService.getById(id);
        return R.ok(userAddress);
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -355,10 +355,23 @@
     * @param id
     * @return
     */
    @GetMapping(value = "/user/getUserById/{id}")
    @PostMapping(value = "/user/getUserById/{id}")
    public R<TAppUser> getUserById(@PathVariable Long id){
        TAppUser appUser = appUserService.getById(id);
        return R.ok(appUser);
    }
    /**
     * 修改用户信息
     * @param appUser
     * @return
     */
    @ResponseBody
    @PostMapping("/user/updateAppUser")
    public R updateAppUser(@RequestBody TAppUser appUser){
        appUserService.updateById(appUser);
        return R.ok();
    }
}
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserIntegralChangeController.java
@@ -1,8 +1,15 @@
package com.ruoyi.account.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.account.api.model.TAppUserIntegralChange;
import com.ruoyi.account.service.TAppUserIntegralChangeService;
import com.ruoyi.common.core.domain.R;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
/**
 * <p>
@@ -16,5 +23,22 @@
@RequestMapping("/t-app-user-integral-change")
public class TAppUserIntegralChangeController {
    @Resource
    private TAppUserIntegralChangeService appUserIntegralChangeService;
    /**
     * 添加积分变动记录
     * @param appUserIntegralChange
     * @return
     */
    @ResponseBody
    @PostMapping("/addAppUserIntegralChange")
    public R addAppUserIntegralChange(@RequestBody TAppUserIntegralChange appUserIntegralChange){
        String code = Math.random() * 1000 + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"));
        appUserIntegralChange.setCode(code);
        appUserIntegralChangeService.save(appUserIntegralChange);
        return R.ok();
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/SiteController.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.chargingPile.api.dto.GetSiteListDTO;
import com.ruoyi.chargingPile.api.feignClient.ParkingLotClient;
import com.ruoyi.chargingPile.api.model.Site;
@@ -16,10 +17,7 @@
import com.ruoyi.chargingPile.api.vo.SiteVO;
import com.ruoyi.chargingPile.api.vo.TChargingPileVO;
import com.ruoyi.chargingPile.domain.SiteMenu;
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.domain.R;
import com.ruoyi.common.core.utils.GeodesyUtil;
import com.ruoyi.common.core.web.domain.AjaxResult;
@@ -69,6 +67,8 @@
    @Resource
    private TChargingGunService chargingGunService;
    @Autowired
    private TParkingLotService parkingLotService;
    
    
    
@@ -86,12 +86,23 @@
    public AjaxResult<List<Site>> getSiteList1(){
        return AjaxResult.success(siteService.list(new QueryWrapper<>()));
    }
    @ApiOperation(value = "获取站点分页列表", tags = {"小程序-站点管理"})
    @PostMapping("/getSiteListGun")
    @ApiOperation(value = "获取站点列表 不分页", tags = {"管理后台-接口信息使用"})
    public AjaxResult<List<Site>> getSiteListGun(){
        return AjaxResult.success(siteService.getSiteListGun());
    }
    @PostMapping("/getSiteListParkLot")
    @ApiOperation(value = "获取站点列表不分页", tags = {"管理后台-停车场绑定"})
    public AjaxResult<List<Site>> getSiteListParkLot(){
        return AjaxResult.success(siteService.getSiteListParkLot());
    }
    @ApiOperation(value = "获取站点分页列表", tags = {"小程序-站点管理-首页"})
    @PostMapping("/pageList")
    public AjaxResult<PageInfo<SiteVO>> pageList(@Validated @RequestBody SiteQuery query){
        return AjaxResult.success(siteService.pageList(query));
    }
    @ApiOperation(value = "获取站点详细信息", tags = {"小程序-站点管理-站点详情"})
    @PostMapping("/getDetailById")
    public AjaxResult<SiteDetailVO> getDetailById(@Validated @RequestBody SiteDetailQuery query){
@@ -100,7 +111,8 @@
        Map<String, Double> distance = GeodesyUtil.getDistance(query.getLat() + "," + query.getLon(), siteDetailVO.getLat() + "," + siteDetailVO.getLon());
        siteDetailVO.setDistance(distance.get("WGS84"));
        // 查询绑定车牌提示文案
        TParkingLot parkingLot = parkingLotClient.getLotBySiteId(query.getSiteId()).getData();
        TParkingLot parkingLot = parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class)
                .eq(TParkingLot::getSiteId, query.getSiteId()));
        if(Objects.nonNull(parkingLot)){
            siteDetailVO.setRemark(parkingLot.getRemark());
        }
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java
@@ -3,9 +3,12 @@
import com.ruoyi.chargingPile.api.dto.TChargingGunDTO;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.chargingPile.api.query.TChargingGunQuery;
import com.ruoyi.chargingPile.api.vo.TChargingGunVO;
import com.ruoyi.chargingPile.service.TChargingGunService;
import com.ruoyi.chargingPile.service.TChargingPileService;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.log.annotation.Log;
@@ -16,6 +19,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@@ -33,6 +37,9 @@
public class TChargingGunController {
    private final TChargingGunService chargingGunService;
    @Resource
    private TChargingPileService chargingPileService;
    @Autowired
    public TChargingGunController(TChargingGunService chargingGunService) {
@@ -118,5 +125,32 @@
    public void downloadQRCode(@PathVariable Integer id, HttpServletResponse response){
        // todo 待完善
    }
    /**
     * 根据id获取充电枪完整名称
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping(value = "/getAllName/{id}")
    public R<String> getAllName(@PathVariable Integer id){
        TChargingGun chargingGun = chargingGunService.getById(id);
        TChargingPile chargingPile = chargingPileService.getById(chargingGun.getChargingPileId());
        return R.ok(chargingPile.getName() + chargingGun.getName());
    }
    /**
     * 根据id获取充电枪详情
     * @param id
     * @return
     */
    @ResponseBody
    @PostMapping(value = "/getChargingGunById/{id}")
    public R<TChargingGun> getChargingGunById(@PathVariable Integer id){
        TChargingGun chargingGun = chargingGunService.getById(id);
        return R.ok(chargingGun);
    }
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingPileController.java
@@ -80,7 +80,6 @@
    }
    
    
    @ResponseBody
    @GetMapping("/pageChargingPileList")
    @ApiOperation(value = "获取充电桩列表数据", tags = {"管理后台-充电桩信息"})
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TParkingLotController.java
@@ -130,7 +130,7 @@
    /**
     * 通过站点id查询停车场信息
     */
    @GetMapping(value = "/getLotBySiteId")
    @PostMapping(value = "/getLotBySiteId")
    public R<TParkingLot> getLotBySiteId(@RequestParam("siteId") Integer siteId){
        return R.ok(parkingLotService.getOne(Wrappers.lambdaQuery(TParkingLot.class)
                .eq(TParkingLot::getSiteId, siteId)));
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/mapper/SiteMapper.java
@@ -41,4 +41,16 @@
     */
    SiteDetailVO getDetailById(@Param("siteId")Integer siteId);
    /**
     * 获取站点列表不分页 管理后台-停车场绑定
     * @return
     */
    List<Site> getSiteListParkLot(@Param("ids")Set<Integer> ids);
    /**
     * 获取站点列表不分页接口信息使用
     * @param ids
     * @return
     */
    List<Site> getSiteListGun(@Param("ids")Set<Integer> ids);
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/ISiteService.java
@@ -13,6 +13,8 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2024/8/7 19:54
@@ -73,4 +75,18 @@
     * @return
     */
    SiteDetailVO getDetailById(Integer siteId);
    /**
     * 获取站点列表不分页 管理后台-停车场绑定
     * @return
     */
    List<Site> getSiteListParkLot();
    /**
     * 获取站点列表不分页接口信息使用
     * @return
     */
    List<Site> getSiteListGun();
}
ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/service/impl/SiteServiceImpl.java
@@ -229,6 +229,50 @@
        return this.baseMapper.getDetailById(siteId);
    }
    @Override
    public List<Site> getSiteListParkLot() {
        Set<Integer> ids = null;
        //校验合作商权限
        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
        Integer roleType = sysUser.getRoleType();
        Integer objectId = sysUser.getObjectId();
        //合作商
        if(roleType == 2){
            ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
        }else{
            //非管理员需要根据角色和用户配置查询允许的站点数据
            if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
                List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData();
                data.addAll(data1);
                ids = new HashSet<>(data);
            }
        }
        return this.baseMapper.getSiteListParkLot(ids);
    }
    @Override
    public List<Site> getSiteListGun() {
        Set<Integer> ids = null;
        //校验合作商权限
        SysUser sysUser = sysUserClient.getSysUser(SecurityUtils.getUserId()).getData();
        Integer roleType = sysUser.getRoleType();
        Integer objectId = sysUser.getObjectId();
        //合作商
        if(roleType == 2){
            ids = partnerService.authSite(objectId, SiteMenu.SITE_LIST);
        }else{
            //非管理员需要根据角色和用户配置查询允许的站点数据
            if(!SecurityUtils.isAdmin(SecurityUtils.getUserId())){
                List<Integer> data = userSiteClient.getSiteIds(sysUser.getUserId()).getData();
                List<Integer> data1 = roleSiteClient.getSiteIds(sysUser.getRoleId()).getData();
                data.addAll(data1);
                ids = new HashSet<>(data);
            }
        }
        return this.baseMapper.getSiteListGun(ids);
    }
    /**
     * 设置站点计费策略
ruoyi-service/ruoyi-chargingPile/src/main/resources/mapper/chargingPile/SiteMapper.xml
@@ -178,4 +178,32 @@
        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>
    <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
        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
                <foreach collection="ids" item="id" index="index" open="(" separator="," close=")">
                    #{id}
                </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">
        select <include refid="Base_Column_List"></include>
        from t_site
        <where>
            <if test="null != ids and ids.size()>0">
                AND id IN
                <foreach collection="ids" item="id" index="index" open="(" separator="," close=")">
                    #{id}
                </foreach>
            </if>
            AND del_flag = ${@com.ruoyi.common.core.enums.DelFlagEnum@NO.getCode()}
        </where>
    </select>
</mapper>
ruoyi-service/ruoyi-order/pom.xml
@@ -61,6 +61,11 @@
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        </dependency>
        <!-- SpringBoot Actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderAccountingStrategyController.java
@@ -34,7 +34,7 @@
     * @return
     */
    @ResponseBody
    @GetMapping("/getTotalElectricQuantity/{days}")
    @PostMapping("/getTotalElectricQuantity/{days}")
    public R<List<List<Map<String, Object>>>> getTotalElectricQuantity(@PathVariable Integer days, @RequestParam("siteIds") Set<Integer> siteIds){
        List<List<Map<String, Object>>> list = chargingOrderAccountingStrategyService.getTotalElectricQuantity(days, siteIds);
        return R.ok(list);
@@ -47,7 +47,7 @@
     * @return
     */
    @ResponseBody
    @GetMapping("/getDailyChargingDegree/{days}")
    @PostMapping("/getDailyChargingDegree/{days}")
    public R<List<Double>> getDailyChargingDegree(@PathVariable Integer days, @RequestParam("siteIds") Set<Integer> siteIds){
        List<Double> list = chargingOrderAccountingStrategyService.getDailyChargingDegree(days, siteIds);
        return R.ok(list);
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java
@@ -3,13 +3,21 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.BasePage;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.query.TChargingCountQuery;
import com.ruoyi.order.dto.GetMyChargingOrderList;
import com.ruoyi.order.dto.MyChargingOrderInfo;
import com.ruoyi.order.service.TChargingOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.List;
/**
@@ -78,11 +86,31 @@
     * @param chargingGunId 充电枪id
     * @return
     */
    @GetMapping(value = "/getOrderDetailByGunId")
    @PostMapping(value = "/getOrderDetailByGunId")
    public R<TChargingOrder> getOrderDetailByGunId(@RequestParam("chargingGunId") Integer chargingGunId){
        TChargingOrder one = chargingOrderService.getOne(new LambdaQueryWrapper<TChargingOrder>().eq(TChargingOrder::getChargingGunId, chargingGunId)
                .eq(TChargingOrder::getDelFlag, 0).eq(TChargingOrder::getStatus, 3));
        return R.ok(one);
    }
    @ResponseBody
    @GetMapping(value = "/getMyChargingOrderList")
    @ApiOperation(value = "获取充电记录列表", tags = {"小程序-充电记录"})
    public AjaxResult<Map<String, Object>> getMyChargingOrderList(GetMyChargingOrderList query){
        Map<String, Object> orderList = chargingOrderService.getMyChargingOrderList(query);
        return AjaxResult.success(orderList);
    }
    @ResponseBody
    @GetMapping(value = "/getMyChargingOrderInfo")
    @ApiOperation(value = "获取充电记订单明细", tags = {"小程序-充电记录"})
    public AjaxResult<MyChargingOrderInfo> getMyChargingOrderInfo(String id){
        MyChargingOrderInfo myChargingOrderInfo = chargingOrderService.getMyChargingOrderInfo(id);
        return AjaxResult.success(myChargingOrderInfo);
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -6,26 +6,25 @@
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.model.TChargingPile;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.order.api.model.TExchangeOrder;
import com.ruoyi.order.api.model.TShoppingOrder;
import com.ruoyi.order.api.query.TActivityStatisticsQuery;
import com.ruoyi.order.api.vo.TActivityStatisticslVO;
import com.ruoyi.order.api.vo.TActivityVO;
import com.ruoyi.order.dto.ExchangeOrderGoodsInfo;
import com.ruoyi.order.dto.GetMyExchangeOrder;
import com.ruoyi.order.dto.MyExchangeOrderList;
import com.ruoyi.order.service.TChargingOrderService;
import com.ruoyi.order.service.TExchangeOrderService;
import com.ruoyi.order.service.TShoppingOrderService;
import com.ruoyi.order.service.TVipOrderService;
import com.ruoyi.order.service.impl.TChargingOrderServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -41,17 +40,14 @@
@RestController
@RequestMapping("/t-exchange-order")
public class TExchangeOrderController {
    @Autowired
    @Resource
    private TShoppingOrderService tShoppingOrderService;
    @Autowired
    @Resource
    private TExchangeOrderService exchangeOrderService;
    @Autowired
    private TChargingOrderService chargingOrderService;
    @Autowired
    private TVipOrderService vipOrderService;
    @Autowired
    @Resource
    private AppUserClient appUserClient;
    @Autowired
    @Resource
    private ChargingPileClient chargingPileClient;
    /**
     * 管理后台 活动费用统计
@@ -148,11 +144,27 @@
        return R.ok(strings);
    }
    /**
     * 管理后台 根据t_app_coupon订单ids查询积分兑换优惠券的订单编号
     * @param goodsIds  订单号-商品类型
     * @return
     */
    @GetMapping("/getMyExchangeOrder")
    @ApiOperation(value = "获取兑换记录列表", tags = {"小程序-兑换记录"})
    public AjaxResult<List<MyExchangeOrderList>> getMyExchangeOrder(GetMyExchangeOrder query){
        List<MyExchangeOrderList> list = exchangeOrderService.getMyExchangeOrder(query);
        return AjaxResult.success(list);
    }
    @GetMapping("/getGoodsExchangeOrder/{id}")
    @ApiOperation(value = "获取兑换订单详情", tags = {"小程序-兑换记录"})
    public AjaxResult<ExchangeOrderGoodsInfo> getGoodsExchangeOrder(@PathVariable String id){
        ExchangeOrderGoodsInfo goodsExchangeOrder = exchangeOrderService.getGoodsExchangeOrder(id);
        return AjaxResult.success(goodsExchangeOrder);
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderAppealController.java
@@ -4,6 +4,8 @@
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.common.security.utils.SecurityUtils;
import com.ruoyi.order.api.model.TOrderAppeal;
import com.ruoyi.order.api.query.TOrderAppealQuery;
import com.ruoyi.order.api.vo.TOrderAppealVO;
import com.ruoyi.order.service.TOrderAppealService;
@@ -56,5 +58,15 @@
    @ResponseBody
    @GetMapping(value = "/addOrderAppeal")
    @ApiOperation(value = "申诉订单", tags = {"小程序-充电记录(个人中心)"})
    public AjaxResult addOrderAppeal(@RequestBody TOrderAppeal orderAppeal){
        Long appUserId = tokenService.getLoginUser().getUserid();
        orderAppeal.setAppUserId(appUserId);
        orderAppeal.setStatus(1);
        orderAppealService.save(orderAppeal);
        return AjaxResult.success();
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TOrderEvaluateController.java
@@ -9,11 +9,10 @@
import com.ruoyi.order.api.vo.TOrderEvaluateVO;
import com.ruoyi.order.dto.GetOrderEvaluatePageList;
import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.other.api.vo.TEvaluationTagVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -112,5 +111,27 @@
        return AjaxResult.ok(orderEvaluateService.getSiteDetailEveList(siteId));
    }
    @PostMapping(value = "/addOrderEvaluate")
    @ApiOperation(value = "添加评价记录", tags = {"小程序-充电记录"})
    public AjaxResult addOrderEvaluate(@RequestBody OrderEvaluateVo query){
        return orderEvaluateService.addOrderEvaluate(query);
    }
    @GetMapping(value = "/getOrderEvaluate")
    @ApiOperation(value = "获取订单评价详情", tags = {"小程序-充电记录"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true),
            @ApiImplicitParam(value = "订单类型(1=充电订单,2=购物订单,3=兑换订单,4=会员订单)", name = "orderType", required = true),
    })
    public AjaxResult<OrderEvaluateVo> getOrderEvaluate(@PathVariable Integer orderId, Integer orderType){
        OrderEvaluateVo orderEvaluate = orderEvaluateService.getOrderEvaluate(orderId, orderType);
        return AjaxResult.success(orderEvaluate);
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/ExchangeOrderGoodsInfo.java
New file
@@ -0,0 +1,54 @@
package com.ruoyi.order.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 14:07
 */
@Data
@ApiModel
public class ExchangeOrderGoodsInfo {
    @ApiModelProperty("订单id")
    private String id;
    @ApiModelProperty("状态(1=待发货,2=待收货,3=已完成,4=已取消)")
    private Integer status;
    @ApiModelProperty("收货人姓名")
    private String consignee;
    @ApiModelProperty("电话")
    private String phone;
    @ApiModelProperty("地址")
    private String address;
    @ApiModelProperty("快递公司")
    private String expressCompany;
    @ApiModelProperty("快递单号")
    private String expressNumber;
    @ApiModelProperty("商品名称")
    private String name;
    @ApiModelProperty("商品图片")
    private String imgUrl;
    @ApiModelProperty("兑换数量")
    private Integer purchaseQuantity;
    @ApiModelProperty("兑换积分单价")
    private Integer unitPoints;
    @ApiModelProperty("订单编号")
    private String code;
    @ApiModelProperty("下单时间")
    private String createTime;
    @ApiModelProperty("兑换总积分")
    private Integer points;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("发货时间")
    private String deliveryTime;
    @ApiModelProperty("完成时间")
    private String finishTime;
    @ApiModelProperty("优惠券类型(1=充电优惠券,2=购物优惠券)")
    private Integer couponType;
    @ApiModelProperty("优惠券有效天数")
    private Integer days;
    @ApiModelProperty("有效期截止时间")
    private String endTime;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetMyChargingOrderList.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.order.dto;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2024/8/15 19:11
 */
@Data
@ApiModel
public class GetMyChargingOrderList extends BasePage {
    @ApiModelProperty("0=全部,1=待评价")
    private Integer type;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/GetMyExchangeOrder.java
New file
@@ -0,0 +1,17 @@
package com.ruoyi.order.dto;
import com.ruoyi.common.core.web.page.BasePage;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 13:34
 */
@Data
@ApiModel
public class GetMyExchangeOrder extends BasePage {
    @ApiModelProperty("状态(0=全部,1=待发货,2=待收货,3=已完成)")
    private Integer status;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/MyChargingOrderInfo.java
New file
@@ -0,0 +1,59 @@
package com.ruoyi.order.dto;
import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 9:08
 */
@Data
@ApiModel
public class MyChargingOrderInfo {
    @ApiModelProperty("订单id")
    private String id;
    @ApiModelProperty("订单编号")
    private String code;
    @ApiModelProperty("订单时间")
    private String createTime;
    @ApiModelProperty("订单状态(0=未知,1=等待中,2=启动中,3=充电中,4=停止中,5=已结束)")
    private Integer status;
    @ApiModelProperty("订单标题")
    private String title;
    @ApiModelProperty("充电模式(1=超级快充,2=快充,3=慢充)")
    private Integer chargeMode;
    @ApiModelProperty("充电枪名称")
    private String name;
    @ApiModelProperty("车牌号")
    private String licensePlate;
    @ApiModelProperty("充电开始时间")
    private Long startTime;
    @ApiModelProperty("充电结束时间")
    private Long endTime;
    @ApiModelProperty("充电费")
    private BigDecimal orderAmount;
    @ApiModelProperty("实际消费")
    private BigDecimal paymentAmount;;
    @ApiModelProperty("充值金额")
    private BigDecimal rechargeAmount;
    @ApiModelProperty("优惠券抵扣")
    private BigDecimal couponDiscountAmount;
    @ApiModelProperty("会员抵扣")
    private BigDecimal vipDiscountAmount;
    @ApiModelProperty("退回金额")
    private BigDecimal refundAmount;
    @ApiModelProperty("阶段费用明细")
    private List<TChargingOrderAccountingStrategy> stageCost;
    @ApiModelProperty("电流电压曲线")
    private Map<String, Object> currentAndVoltage;
    @ApiModelProperty("功率曲线")
    private Map<String, Object> power;
    @ApiModelProperty("是否可申诉(0=否,1=是)")
    private Integer actionable;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/MyChargingOrderList.java
New file
@@ -0,0 +1,32 @@
package com.ruoyi.order.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author zhibing.pu
 * @Date 2024/8/15 18:59
 */
@Data
@ApiModel
public class MyChargingOrderList {
    @ApiModelProperty("订单id")
    private String id;
    @ApiModelProperty("订单状态(0=未知,1=等待中,2=启动中,3=充电中,4=停止中,5=已结束)")
    private Integer status;
    @ApiModelProperty("标题")
    private String title;
    @ApiModelProperty("充电度数")
    private BigDecimal chargingDegree;
    @ApiModelProperty("充电桩枪名称")
    private String name;
    @ApiModelProperty("结束方式(0=异常终止,1=主动终止,2=满电终止,3=费用不足终止)")
    private Integer endMode;
    @ApiModelProperty("支付金额")
    private BigDecimal payMoney;
    @ApiModelProperty("订单时间")
    private String createTime;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/MyExchangeOrderList.java
New file
@@ -0,0 +1,30 @@
package com.ruoyi.order.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 13:36
 */
@Data
@ApiModel
public class MyExchangeOrderList {
    @ApiModelProperty("订单id")
    private String id;
    @ApiModelProperty("兑换积分单价")
    private Integer unitPoints;
    @ApiModelProperty("兑换总积分")
    private Integer points;
    @ApiModelProperty("兑换数量")
    private Integer purchaseQuantity;
    @ApiModelProperty("订单类型(1=商品,2=优惠券)")
    private Integer orderType;
    @ApiModelProperty("状态(1=待发货,2=待收货,3=已完成,4=已取消)")
    private Integer status;
    @ApiModelProperty("名称")
    private String name;
    @ApiModelProperty("图片")
    private String imgUrl;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/dto/OrderEvaluateVo.java
New file
@@ -0,0 +1,23 @@
package com.ruoyi.order.dto;
import com.ruoyi.order.api.model.TOrderEvaluate;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author zhibing.pu
 * @Date 2024/8/16 10:25
 */
@Data
@ApiModel
public class OrderEvaluateVo extends TOrderEvaluate {
    @ApiModelProperty("评价标签id")
    private List<Integer> tagIds;
    @ApiModelProperty("评价标签名称")
    private List<String> tagName;
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -4,6 +4,9 @@
import com.ruoyi.order.api.model.TChargingOrder;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  Mapper 接口
@@ -15,4 +18,14 @@
@Mapper
public interface TChargingOrderMapper extends BaseMapper<TChargingOrder> {
    /**
     * 获取小程序充电记录列表数据
     * @param appUserId
     * @param type
     * @param pageCurr
     * @param pageSize
     * @return
     */
    List<TChargingOrder> getMyChargingOrderList(Long appUserId, Integer type, Integer pageCurr, Integer pageSize);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TChargingOrderService.java
@@ -1,7 +1,12 @@
package com.ruoyi.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.web.page.BasePage;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.dto.GetMyChargingOrderList;
import com.ruoyi.order.dto.MyChargingOrderInfo;
import java.util.Map;
/**
 * <p>
@@ -13,4 +18,19 @@
 */
public interface TChargingOrderService extends IService<TChargingOrder> {
    /**
     * 获取小程序充电记录列表数据
     * @param query
     * @return
     */
    Map<String, Object> getMyChargingOrderList(GetMyChargingOrderList query);
    /**
     * 获取小程序充电记录明细
     * @param id
     * @return
     */
    MyChargingOrderInfo getMyChargingOrderInfo(String id);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TExchangeOrderService.java
@@ -2,6 +2,11 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.order.api.model.TExchangeOrder;
import com.ruoyi.order.dto.ExchangeOrderGoodsInfo;
import com.ruoyi.order.dto.GetMyExchangeOrder;
import com.ruoyi.order.dto.MyExchangeOrderList;
import java.util.List;
/**
 * <p>
@@ -13,4 +18,19 @@
 */
public interface TExchangeOrderService extends IService<TExchangeOrder> {
    /**
     * 获取小程序兑换记录
     * @param query
     * @return
     */
    List<MyExchangeOrderList> getMyExchangeOrder(GetMyExchangeOrder query);
    /**
     * 获取兑换订单详情
     * @param id
     * @return
     */
    ExchangeOrderGoodsInfo getGoodsExchangeOrder(String id);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/TOrderEvaluateService.java
@@ -1,6 +1,7 @@
package com.ruoyi.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.order.api.model.TOrderEvaluate;
import com.ruoyi.order.api.query.TOrderEvaluateQuery;
@@ -8,7 +9,9 @@
import com.ruoyi.order.api.vo.TOrderEvaluateVO;
import com.ruoyi.order.dto.GetOrderEvaluatePageList;
import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.other.api.vo.TEvaluationTagVO;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@@ -50,4 +53,20 @@
     * @return
     */
    PageInfo<GetOrderEvaluatePageListDTO> getPageList(GetOrderEvaluatePageList pageList);
    /**
     * 评价订单
     * @param query
     * @return
     */
    AjaxResult addOrderEvaluate(OrderEvaluateVo query);
    /**
     * 根据订单id获取
     * @param orderId
     * @return
     */
    OrderEvaluateVo getOrderEvaluate(Integer orderId, Integer orderType);
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -1,10 +1,33 @@
package com.ruoyi.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.chargingPile.api.feignClient.ChargingGunClient;
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.model.TChargingGun;
import com.ruoyi.common.core.web.page.BasePage;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.TChargingOrderAccountingStrategy;
import com.ruoyi.order.dto.GetMyChargingOrderList;
import com.ruoyi.order.dto.MyChargingOrderInfo;
import com.ruoyi.order.dto.MyChargingOrderList;
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.order.service.TChargingOrderAccountingStrategyService;
import com.ruoyi.order.service.TChargingOrderService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
 * <p>
@@ -17,4 +40,101 @@
@Service
public class TChargingOrderServiceImpl extends ServiceImpl<TChargingOrderMapper, TChargingOrder> implements TChargingOrderService {
    @Resource
    private ChargingGunClient chargingGunClient;
    @Resource
    private SiteClient siteClient;
    @Resource
    private AppUserCarClient appUserCarClient;
    @Resource
    private TChargingOrderAccountingStrategyService chargingOrderAccountingStrategyService;
    @Resource
    private TokenService tokenService;
    /**
     * 获取小程序充电记录列表数据
     * @param query
     * @return
     */
    @Override
    public Map<String, Object> getMyChargingOrderList(GetMyChargingOrderList query) {
        Long appUserId = tokenService.getLoginUser().getUserid();
        Map<String, Object> map = new HashMap<>();
        int size = this.baseMapper.getMyChargingOrderList(appUserId, 1, null, null).size();
        map.put("number", size);
        List<TChargingOrder> list = this.baseMapper.getMyChargingOrderList(appUserId, query.getType(), query.getPageCurr(), query.getPageSize());
        List<MyChargingOrderList> orderLists = new ArrayList<>();
        for (TChargingOrder tChargingOrder : list) {
            MyChargingOrderList myChargingOrderList = new MyChargingOrderList();
            myChargingOrderList.setId(tChargingOrder.getId().toString());
            myChargingOrderList.setStatus(tChargingOrder.getStatus());
            Site site = siteClient.getSiteByIds(Arrays.asList(tChargingOrder.getSiteId())).getData().get(0);
            myChargingOrderList.setTitle(site.getName());
            myChargingOrderList.setChargingDegree(tChargingOrder.getChargingCapacity());
            String name = chargingGunClient.getAllName(tChargingOrder.getChargingGunId()).getData();
            myChargingOrderList.setName(name);
            myChargingOrderList.setEndMode(tChargingOrder.getEndMode());
            BigDecimal payMoney = tChargingOrder.getStatus() < 4 ? tChargingOrder.getRechargeAmount() : tChargingOrder.getPaymentAmount();
            myChargingOrderList.setPayMoney(payMoney);
            myChargingOrderList.setCreateTime(tChargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            orderLists.add(myChargingOrderList);
        }
        map.put("list", orderLists);
        return map;
    }
    /**
     * 获取充电订单明细
     * @param id 订单id
     * @return
     */
    @Override
    public MyChargingOrderInfo getMyChargingOrderInfo(String id) {
        TChargingOrder chargingOrder = this.getById(id);
        MyChargingOrderInfo myChargingOrderInfo = new MyChargingOrderInfo();
        myChargingOrderInfo.setId(id);
        myChargingOrderInfo.setCode(chargingOrder.getCode());
        myChargingOrderInfo.setCreateTime(chargingOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        myChargingOrderInfo.setStatus(chargingOrder.getStatus());
        Site site = siteClient.getSiteByIds(Arrays.asList(chargingOrder.getSiteId())).getData().get(0);
        myChargingOrderInfo.setTitle(site.getName());
        TChargingGun chargingGun = chargingGunClient.getChargingGunById(chargingOrder.getChargingGunId()).getData();
        myChargingOrderInfo.setChargeMode(chargingGun.getChargeMode());
        String name = chargingGunClient.getAllName(chargingOrder.getChargingGunId()).getData();
        myChargingOrderInfo.setName(name);
        if(null != chargingOrder.getAppUserCarId()){
            TAppUserCar tAppUserCar = appUserCarClient.getCarByIds(Arrays.asList(chargingOrder.getAppUserCarId())).getData().get(0);
            myChargingOrderInfo.setLicensePlate(tAppUserCar.getLicensePlate());
        }else{
            myChargingOrderInfo.setLicensePlate("无");
        }
        myChargingOrderInfo.setStartTime(chargingOrder.getStartTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
        myChargingOrderInfo.setEndTime(chargingOrder.getEndTime().toInstant(ZoneOffset.of("+8")).toEpochMilli());
        myChargingOrderInfo.setOrderAmount(chargingOrder.getOrderAmount());
        myChargingOrderInfo.setPaymentAmount(chargingOrder.getPaymentAmount());
        myChargingOrderInfo.setRechargeAmount(chargingOrder.getRechargeAmount());
        myChargingOrderInfo.setCouponDiscountAmount(chargingOrder.getCouponDiscountAmount());
        myChargingOrderInfo.setVipDiscountAmount(chargingOrder.getVipDiscountAmount());
        myChargingOrderInfo.setRefundAmount(chargingOrder.getRefundAmount());
        List<TChargingOrderAccountingStrategy> stageCost = chargingOrderAccountingStrategyService.list(
                new LambdaQueryWrapper<TChargingOrderAccountingStrategy>().eq(TChargingOrderAccountingStrategy::getChargingOrderId, id)
                        .orderByAsc(TChargingOrderAccountingStrategy::getStartTime)
        );
        myChargingOrderInfo.setStageCost(stageCost);
        // todo 待完善
        //再MongoDB中获取数据
        myChargingOrderInfo.setCurrentAndVoltage(null);
        //再MongoDB中获取数据
        myChargingOrderInfo.setPower(null);
        myChargingOrderInfo.setActionable(myChargingOrderInfo.getEndTime() + 604800000L > System.currentTimeMillis() ? 0 : 1);
        return myChargingOrderInfo;
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java
@@ -1,10 +1,27 @@
package com.ruoyi.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserAddressClient;
import com.ruoyi.account.api.model.TAppUserAddress;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.order.api.model.TExchangeOrder;
import com.ruoyi.order.dto.ExchangeOrderGoodsInfo;
import com.ruoyi.order.dto.GetMyExchangeOrder;
import com.ruoyi.order.dto.MyExchangeOrderList;
import com.ruoyi.order.mapper.TExchangeOrderMapper;
import com.ruoyi.order.service.TExchangeOrderService;
import com.ruoyi.other.api.domain.TCoupon;
import com.ruoyi.other.api.domain.TGoods;
import com.ruoyi.other.api.feignClient.CouponClient;
import com.ruoyi.other.api.feignClient.GoodsClient;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
 * <p>
@@ -17,4 +34,107 @@
@Service
public class TExchangeOrderServiceImpl extends ServiceImpl<TExchangeOrderMapper, TExchangeOrder> implements TExchangeOrderService {
    @Resource
    private TokenService tokenService;
    @Resource
    private GoodsClient goodsClient;
    @Resource
    private CouponClient couponClient;
    @Resource
    private AppUserAddressClient appUserAddressClient;
    /**
     * 获取小程序兑换记录
     * @param query
     * @return
     */
    @Override
    public List<MyExchangeOrderList> getMyExchangeOrder(GetMyExchangeOrder query) {
        Long userid = tokenService.getLoginUser().getUserid();
        LambdaQueryWrapper<TExchangeOrder> wrapper = new LambdaQueryWrapper<TExchangeOrder>().eq(TExchangeOrder::getDelFlag, 0).eq(TExchangeOrder::getAppUserId, userid);
        if(query.getStatus() == 0){
            wrapper.ne(TExchangeOrder::getStatus, 4);
        }else{
            wrapper.eq(TExchangeOrder::getStatus, query.getStatus());
        }
        List<TExchangeOrder> list = this.list(wrapper.orderByDesc(TExchangeOrder::getCreateTime).last(" limit " + query.getPageCurr() + "," + query.getPageSize()));
        List<MyExchangeOrderList> pageList = new ArrayList<>();
        for (TExchangeOrder tExchangeOrder : list) {
            MyExchangeOrderList exchangeOrderList = new MyExchangeOrderList();
            exchangeOrderList.setId(tExchangeOrder.getId().toString());
            exchangeOrderList.setUnitPoints(tExchangeOrder.getPoints() / tExchangeOrder.getPurchaseQuantity());
            exchangeOrderList.setPoints(tExchangeOrder.getPoints());
            exchangeOrderList.setPurchaseQuantity(tExchangeOrder.getPurchaseQuantity());
            exchangeOrderList.setOrderType(tExchangeOrder.getOrderType());
            exchangeOrderList.setStatus(tExchangeOrder.getStatus());
            String name = "";
            String imgUrl = "";
            if(tExchangeOrder.getOrderType() == 1){
                TGoods goods = goodsClient.getGoodsById(tExchangeOrder.getGoodsId()).getData();
                name = goods.getName();
                imgUrl = goods.getCoverPicture();
            }else{
                TCoupon coupon = couponClient.getCouponById(tExchangeOrder.getGoodsId()).getData();
                name = coupon.getName();
                imgUrl = coupon.getCoverPicture();
            }
            exchangeOrderList.setName(name);
            exchangeOrderList.setImgUrl(imgUrl);
            pageList.add(exchangeOrderList);
        }
        return pageList;
    }
    /**
     * 获取兑换订单详情
     * @param id
     * @return
     */
    @Override
    public ExchangeOrderGoodsInfo getGoodsExchangeOrder(String id) {
        TExchangeOrder exchangeOrder = this.getById(id);
        ExchangeOrderGoodsInfo info = new ExchangeOrderGoodsInfo();
        info.setId(id);
        info.setStatus(exchangeOrder.getStatus());
        TAppUserAddress userAddress = appUserAddressClient.getAppUserAddressById(exchangeOrder.getAppUserAddressId()).getData();
        info.setConsignee(userAddress.getName());
        info.setPhone(userAddress.getPhone());
        info.setAddress(userAddress.getAddress());
        info.setExpressCompany(exchangeOrder.getExpressCompany());
        info.setExpressNumber(exchangeOrder.getExpressNumber());
        String name = "";
        String imgUrl = "";
        if(exchangeOrder.getOrderType() == 1){
            TGoods goods = goodsClient.getGoodsById(exchangeOrder.getGoodsId()).getData();
            name = goods.getName();
            imgUrl = goods.getCoverPicture();
        }else{
            TCoupon coupon = couponClient.getCouponById(exchangeOrder.getGoodsId()).getData();
            info.setCouponType(coupon.getType());
            info.setDays(coupon.getDays());
            info.setEndTime(coupon.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            name = coupon.getName();
            imgUrl = coupon.getCoverPicture();
        }
        info.setName(name);
        info.setImgUrl(imgUrl);
        info.setPurchaseQuantity(exchangeOrder.getPurchaseQuantity());
        info.setUnitPoints(exchangeOrder.getPoints() / exchangeOrder.getPurchaseQuantity());
        info.setCode(exchangeOrder.getCode());
        info.setCreateTime(exchangeOrder.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        info.setPoints(exchangeOrder.getPoints());
        info.setRemark(exchangeOrder.getRemark());
        info.setDeliveryTime(exchangeOrder.getConsignerTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        info.setFinishTime(exchangeOrder.getReceivingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        return info;
    }
}
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TOrderEvaluateServiceImpl.java
@@ -1,19 +1,26 @@
package com.ruoyi.order.service.impl;
import cn.hutool.db.DaoTemplate;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.account.api.feignClient.AppUserCarClient;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.feignClient.AppUserIntegralChangeClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserCar;
import com.ruoyi.account.api.feignClient.AppUserClient;
import com.ruoyi.account.api.model.TAppUser;
import com.ruoyi.account.api.model.TAppUserIntegralChange;
import com.ruoyi.chargingPile.api.feignClient.SiteClient;
import com.ruoyi.chargingPile.api.model.Site;
import com.ruoyi.chargingPile.api.vo.TAccountingStrategyVO;
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.service.TokenService;
import com.ruoyi.order.api.model.TChargingOrder;
import com.ruoyi.order.api.model.TOrderEvaluate;
import com.ruoyi.order.api.model.TOrderEvaluateTag;
@@ -22,19 +29,26 @@
import com.ruoyi.order.api.vo.TOrderEvaluateVO;
import com.ruoyi.order.dto.GetOrderEvaluatePageList;
import com.ruoyi.order.dto.GetOrderEvaluatePageListDTO;
import com.ruoyi.order.dto.OrderEvaluateVo;
import com.ruoyi.order.mapper.TChargingOrderMapper;
import com.ruoyi.order.mapper.TOrderEvaluateMapper;
import com.ruoyi.order.mapper.TOrderEvaluateTagMapper;
import com.ruoyi.order.service.TChargingOrderService;
import com.ruoyi.order.service.TOrderEvaluateService;
import com.ruoyi.other.api.domain.TEvaluationTag;
import com.ruoyi.other.api.domain.TIntegralRule;
import com.ruoyi.other.api.feignClient.IntegralRuleClient;
import com.ruoyi.other.api.feignClient.TEvaluationTagClient;
import com.ruoyi.other.api.vo.TEvaluationTagVO;
import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
@@ -66,6 +80,19 @@
    
    @Resource
    private SiteClient siteClient;
    @Resource
    private TokenService tokenService;
    @Resource
    private TChargingOrderService chargingOrderService;
    @Resource
    private IntegralRuleClient integralRuleClient;
    @Resource
    private AppUserIntegralChangeClient appUserIntegralChangeClient;
    
    
    
@@ -202,4 +229,84 @@
        }
        return pageInfo.setRecords(list);
    }
    /**
     * 评价订单
     * @param query
     * @return
     */
    @Override
    @GlobalTransactional(rollbackFor = Exception.class)//分布式事务
    public AjaxResult addOrderEvaluate(OrderEvaluateVo query) {
        TOrderEvaluate orderEvaluate = this.getOne(new LambdaQueryWrapper<TOrderEvaluate>().eq(TOrderEvaluate::getOrderId, query.getOrderId())
                .eq(TOrderEvaluate::getOrderType, query.getOrderType()).eq(TOrderEvaluate::getDelFlag, 0));
        if(null != orderEvaluate){
            return AjaxResult.error("不能重复评价");
        }
        orderEvaluate = new TOrderEvaluate();
        BeanUtils.copyProperties(query, orderEvaluate);
        Long userid = tokenService.getLoginUser().getUserid();
        orderEvaluate.setAppUserId(userid);
        if(query.getOrderType() == 1){
            TChargingOrder chargingOrder = chargingOrderService.getById(query.getOrderId());
            orderEvaluate.setAppUserCarId(chargingOrder.getAppUserCarId());
        }
        this.save(orderEvaluate);
        List<Integer> tagIds = query.getTagIds();
        for (Integer tagId : tagIds) {
            TOrderEvaluateTag orderEvaluateTag = new TOrderEvaluateTag();
            orderEvaluateTag.setOrderEvaluateId(orderEvaluate.getId());
            orderEvaluateTag.setEvaluationTagId(tagId);
            orderEvaluateTagMapper.insert(orderEvaluateTag);
        }
        //判断发放积分  文字+图片+5星好评
        if(StringUtils.isNotEmpty(query.getContent()) && StringUtils.isNotEmpty(query.getImgUrl()) && 5 == query.getMark()){
            TIntegralRule data = integralRuleClient.getSet().getData();
            String credit = data.getCredit();
            //积分
            Integer num1 = JSON.parseObject(credit).getInteger("num1");
            if(null != num1 && 0 < num1){
                TAppUser appUser = appUserClient.getUserById(userid).getData();
                Integer points = appUser.getPoints();
                appUser.setPoints(appUser.getPoints() + num1);
                appUserClient.updateAppUser(appUser);
                //积分变动明细
                TAppUserIntegralChange appUserIntegralChange = new TAppUserIntegralChange();
                appUserIntegralChange.setAppUserId(appUser.getId());
                appUserIntegralChange.setChangeType(3);
                appUserIntegralChange.setHistoricalIntegral(points);
                appUserIntegralChange.setCurrentIntegral(points + num1);
                appUserIntegralChange.setCreateTime(LocalDateTime.now());
                appUserIntegralChangeClient.addAppUserIntegralChange(appUserIntegralChange);
            }
        }
        return AjaxResult.success();
    }
    /**
     * 获取订单评价
     * @param orderId 订单id
     * @param orderType 订单类型
     * @return
     */
    @Override
    public OrderEvaluateVo getOrderEvaluate(Integer orderId, Integer orderType) {
        TOrderEvaluate orderEvaluate = this.getOne(new LambdaQueryWrapper<TOrderEvaluate>().eq(TOrderEvaluate::getOrderId, orderId).eq(TOrderEvaluate::getOrderType, orderType));
        if(null != orderEvaluate){
            OrderEvaluateVo orderEvaluateVo = new OrderEvaluateVo();
            BeanUtils.copyProperties(orderEvaluate, orderEvaluateVo);
            List<TOrderEvaluateTag> tOrderEvaluateTags = orderEvaluateTagMapper.selectList(new LambdaQueryWrapper<TOrderEvaluateTag>().eq(TOrderEvaluateTag::getOrderEvaluateId, orderEvaluate.getId()));
            List<Integer> tagId = tOrderEvaluateTags.stream().map(TOrderEvaluateTag::getEvaluationTagId).collect(Collectors.toList());
            List<TEvaluationTag> data = evaluationTagClient.getListByIds(tagId).getData();
            List<String> collect = data.stream().map(TEvaluationTag::getName).collect(Collectors.toList());
            orderEvaluateVo.setTagName(collect);
            return orderEvaluateVo;
        }
        return null;
    }
}
ruoyi-service/ruoyi-order/src/main/resources/mapper/order/TChargingOrderMapper.xml
@@ -19,6 +19,7 @@
        <result column="start_time" property="startTime" />
        <result column="end_time" property="endTime" />
        <result column="status" property="status" />
        <result column="end_mode" property="endMode"/>
        <result column="recharge_amount" property="rechargeAmount" />
        <result column="recharge_payment_type" property="rechargePaymentType" />
        <result column="recharge_payment_status" property="rechargePaymentStatus" />
@@ -43,4 +44,15 @@
        id, code, order_type, order_classification, app_user_id, app_user_car_id,site_id, parking_lot_id, charging_pile_id, charging_gun_id, start_time, end_time, status, recharge_amount, recharge_payment_type, recharge_payment_status, recharge_serial_number, order_amount, app_coupon_id, coupon_discount_amount, vip_discount, vip_discount_amount, payment_amount, refund_code, refund_amount, refund_status, refund_serial_number, refund_time, create_time, del_flag
    </sql>
    <select id="getMyChargingOrderList" resultMap="BaseResultMap">
        select * from t_charging_order where del_flag = 0 and app_user_id = #{appUserId}
        <if test="1 == type">
            and id not in (select order_id from t_order_evaluate where order_type = 1 and app_user_id = #{appUserId} and del_flag = 0)
        </if>
        order by create_time desc
        <if test="null != pageCurr and null != pageSize">
            limit #{pageCurr}, #{pageSize}
        </if>
    </select>
</mapper>
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -129,5 +129,17 @@
        }
        return R.ok(list);
    }
    /**
     * 根据id获取优惠券信息
     * @param id
     * @return
     */
    @PostMapping(value = "/getCouponById/{id}")
    public R<TCoupon> getCouponById(@PathVariable Integer id){
        TCoupon coupon = tCouponService.getById(id);
        return R.ok(coupon);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TEvaluationTagController.java
@@ -1,6 +1,7 @@
package com.ruoyi.other.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.BasePage;
@@ -96,10 +97,20 @@
     * @param tagIds
     * @return
     */
    @GetMapping("/getListByIds")
    public R<List<TEvaluationTag>> getListByIds(List<Integer> tagIds){
    @PostMapping("/getListByIds")
    public R<List<TEvaluationTag>> getListByIds(@RequestBody List<Integer> tagIds){
        List<TEvaluationTag> tEvaluationTags = evaluationTagService.listByIds(tagIds);
        return R.ok(tEvaluationTags);
    }
    @ResponseBody
    @GetMapping("/getRandomEvaluationTag")
    @ApiOperation(value = "获取随机的4个评价标签", tags = {"小程序-充电记录"})
    public AjaxResult<List<TEvaluationTag>> getRandomEvaluationTag(){
        List<TEvaluationTag> list = evaluationTagService.list(new LambdaQueryWrapper<TEvaluationTag>().last(" order by RAND() limit 0, 4"));
        return AjaxResult.success(list);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -1,6 +1,7 @@
package com.ruoyi.other.controller;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.other.api.domain.TActivity;
@@ -57,5 +58,16 @@
    public AjaxResult<PageInfo<TGoods>> pageList(@RequestBody GoodsDTO dto) {
        return AjaxResult.ok(goodsService.pageList(dto));
    }
    /**
     * 根据id获取商品信息
     * @param id
     * @return
     */
    @PostMapping("/getGoodsById/{id}")
    public R<TGoods> getGoodsById(@PathVariable Integer id){
        TGoods goods = goodsService.getById(id);
        return R.ok(goods);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TIntegralRuleController.java
@@ -1,14 +1,12 @@
package com.ruoyi.other.controller;
import java.time.LocalDateTime;
import java.util.Date;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.other.api.domain.THtml;
import com.ruoyi.other.api.domain.TIntegralRule;
import com.ruoyi.other.api.dto.SaveIntegralDTO;
import com.ruoyi.other.service.THtmlService;
import com.ruoyi.other.service.TIntegralRuleService;
import io.swagger.annotations.ApiImplicitParam;
@@ -32,12 +30,18 @@
    private THtmlService htmlService;
    @Autowired
    private TIntegralRuleService integralRuleService;
    @GetMapping("/getSet")
    @ApiOperation(tags = {"管理后台-积分管理"},value = "获取积分设置")
    public R<TIntegralRule> getSet() {
        TIntegralRule res = integralRuleService.getOne(new QueryWrapper<>());
        return R.ok(res);
    }
    @PostMapping("/saveSet")
    @ApiOperation(tags = {"管理后台-积分管理"},value = "保存积分设置")
    public R saveSet(@RequestBody TIntegralRule dto) {
@@ -94,5 +98,13 @@
        }
        return R.ok();
    }
    @GetMapping("/getIntegralRule")
    @ApiOperation(tags = {"小程序-充电记录"},value = "获取积分规则设置")
    public AjaxResult<String> getIntegralRule(){
        TIntegralRule one = integralRuleService.getOne(null);
        return AjaxResult.success(one);
    }
}
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TRoleSiteController.java
@@ -32,8 +32,8 @@
     * @return
     */
    @ResponseBody
    @GetMapping("/getSiteIds")
    public R<List<Integer>> getSiteIds(Long roleId){
    @PostMapping("/getSiteIds/{roleId}")
    public R<List<Integer>> getSiteIds(@PathVariable Long roleId){
        List<TRoleSite> list = roleSiteService.list(new LambdaQueryWrapper<TRoleSite>().eq(TRoleSite::getRoleId, roleId));
        List<Integer> collect = list.stream().map(TRoleSite::getSiteId).collect(Collectors.toList());
        return R.ok(collect);
@@ -45,7 +45,7 @@
     * @return
     */
    @ResponseBody
    @PostMapping("/getSiteIds")
    @PostMapping("/addRoleSite")
    public R addRoleSite(@RequestBody List<TRoleSite> roleSites){
        roleSiteService.saveBatch(roleSites);
        return R.ok();
ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TUserSiteController.java
@@ -33,8 +33,8 @@
     * @return
     */
    @ResponseBody
    @GetMapping("/getSiteIds")
    public R<List<Integer>> getSiteIds(Long userId){
    @PostMapping("/getSiteIds/{userId}")
    public R<List<Integer>> getSiteIds(@PathVariable Long userId){
        List<TUserSite> list = userSiteService.list(new LambdaQueryWrapper<TUserSite>().eq(TUserSite::getUserId, userId));
        List<Integer> collect = list.stream().map(TUserSite::getSiteId).collect(Collectors.toList());
        return R.ok(collect);
ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TCouponMapper.xml
@@ -7,6 +7,8 @@
        <id column="id" property="id" />
        <result column="type" property="type" />
        <result column="name" property="name" />
        <result column="cover_picture" property="coverPicture"/>
        <result column="details_picture" property="detailsPicture"/>
        <result column="preferential_mode" property="preferentialMode" />
        <result column="discount_amount" property="discountAmount" />
        <result column="meet_the_conditions" property="meetTheConditions" />