From 7d797c3f197371bb66c8ed3e60327817e9f0364c Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期三, 28 八月 2024 13:57:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserAddress.java            |   24 +++
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java   |   29 ++-
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InfoCouponDto.java                |    3 
 ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java  |    2 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java   |    4 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java |   37 ++++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java              |   60 +++++++
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java                |   25 +++
 ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/VipInfoDto.java                       |   10 +
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ListInfoCouponDto.java            |   20 ++
 ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppUserAddressMapper.xml               |    7 
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java      |   15 -
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java   |    5 
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java           |   54 +++++++
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java        |   93 ++++++++++--
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java             |    7 +
 ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java        |    2 
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java           |    8 
 ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml                            |    8 
 19 files changed, 348 insertions(+), 65 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InfoCouponDto.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InfoCouponDto.java
index d3bff84..d6fcd90 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InfoCouponDto.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/InfoCouponDto.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -35,8 +36,10 @@
     private BigDecimal discount;
     @ApiModelProperty(value = "结束时间")
     @TableField("end_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     private LocalDateTime endTime;
     @ApiModelProperty(value = "开始时间")
     @TableField("start_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
     private LocalDateTime startTime;
 }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ListInfoCouponDto.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ListInfoCouponDto.java
new file mode 100644
index 0000000..65b3bc1
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ListInfoCouponDto.java
@@ -0,0 +1,20 @@
+package com.ruoyi.account.api.dto;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Data
+public class ListInfoCouponDto {
+    List<InfoCouponDto> infoCouponDtoList;
+    Integer num1;
+    Integer num2;
+
+
+}
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
index 47eccaf..bb60f76 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/factory/AppUserFallbackFactory.java
@@ -54,6 +54,11 @@
             }
 
             @Override
+            public R changeDown(PointChangeDto points) {
+                return null;
+            }
+
+            @Override
             public R<TAppUser> selectByPhone(String phone) {
                 return R.fail("积分变化失败:"+throwable.getMessage());
             }
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
index 0ad197c..f7c1da1 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/feignClient/AppUserClient.java
@@ -58,6 +58,8 @@
 
     @PostMapping("/t-app-user/user/points/change")
     R change(@RequestBody PointChangeDto points);
+    @PostMapping("/t-app-user/user/points/change/down")
+    R changeDown(@RequestBody PointChangeDto points);
 
     /**
      * 通过手机号查询用户
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserAddress.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserAddress.java
index da2021c..a636720 100644
--- a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserAddress.java
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TAppUserAddress.java
@@ -33,6 +33,10 @@
     @TableId("id")
     private Long id;
 
+    @ApiModelProperty(value = "主键")
+    @TableField(exist = false)
+    private String uid;
+
     @ApiModelProperty(value = "用户id")
     @TableField("app_user_id")
     private Long appUserId;
@@ -45,6 +49,14 @@
     @TableField("phone")
     private String phone;
 
+    @ApiModelProperty(value = "省名称")
+    @TableField("province")
+    private String province;
+
+    @ApiModelProperty(value = "省编号")
+    @TableField("province_code")
+    private String provinceCode;
+
     @ApiModelProperty(value = "市名称")
     @TableField("city")
     private String city;
@@ -53,10 +65,22 @@
     @TableField("city_code")
     private String cityCode;
 
+    @ApiModelProperty(value = "区县")
+    @TableField("district")
+    private String district;
+
+    @ApiModelProperty(value = "区县code")
+    @TableField("district_code")
+    private String districtCode;
+
     @ApiModelProperty(value = "详细地址")
     @TableField("address")
     private String address;
 
+    @ApiModelProperty(value = "门牌号")
+    @TableField("house_number")
+    private String houseNumber;
+
     @ApiModelProperty(value = "经度")
     @TableField("lon")
     private String lon;
diff --git a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
index 4587086..59479ca 100644
--- a/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
+++ b/ruoyi-api/ruoyi-api-chargingPile/src/main/java/com/ruoyi/chargingPile/api/vo/ChargingGunCountVO.java
@@ -9,7 +9,7 @@
 @ApiModel(value = "ChargingGunCountVO对象",description = "充电枪数量VO")
 public class ChargingGunCountVO extends Site {
 
-    @ApiModelProperty(value = "充电枪在线数量")
+    @ApiModelProperty(value = "充电枪空闲数量")
     private Integer freeCount;
     @ApiModelProperty(value = "充电枪总数数量")
     private Integer totalCount;
diff --git a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/VipInfoDto.java b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/VipInfoDto.java
index 0783c96..86e0ed5 100644
--- a/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/VipInfoDto.java
+++ b/ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/dto/VipInfoDto.java
@@ -12,12 +12,19 @@
 
     @ApiModelProperty("月卡价格")
     private BigDecimal monthlyCard;
+    @ApiModelProperty(value = "月卡折扣")
+    private BigDecimal monthlyCardDiscount;
     @ApiModelProperty("季卡价格")
     private BigDecimal seasonCard;
+    @ApiModelProperty(value = "季卡折扣")
+    private BigDecimal seasonCardDiscount;
     @ApiModelProperty("年卡价格")
     private BigDecimal annualCard;
+    @ApiModelProperty(value = "年卡折扣")
+    private BigDecimal annualCardDiscount;
     @ApiModelProperty("最高抵扣价格")
     private BigDecimal maximumDeduction;
+    private BigDecimal timeAmount;
     @ApiModelProperty("抵扣次数")
     private Integer discountTimes;
 
@@ -32,4 +39,7 @@
 
     @ApiModelProperty(value = "最高总折扣")
     private BigDecimal totalDiscount;
+
+    @ApiModelProperty(value = "会员名称")
+    private String name;
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
index 1ed7199..d779300 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserAddressController.java
@@ -53,19 +53,23 @@
     public AjaxResult<List<TAppUserAddress>> queryAddress() {
         // 用户id
         Long userId = tokenService.getLoginUserApplet().getUserId();
-        return AjaxResult.ok(appUserAddressService.list(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, userId)));
+        List<TAppUserAddress> list = appUserAddressService.list(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, userId));
+        list.forEach(e->e.setUid(e.getId().toString()));
+        return AjaxResult.ok(list);
     }
 
     /**
      * 查询用户默认地址列表
      */
-    @ApiOperation(tags = {"小程序-用户地址"},value = "查询用户默认地址列表")
+    @ApiOperation(tags = {"小程序-用户地址"},value = "查询用户默认地址")
     @GetMapping(value = "/queryDefaultAddress")
     public AjaxResult<TAppUserAddress> queryDefaultAddress() {
         // 用户id
         Long userId = tokenService.getLoginUserApplet().getUserId();
-        return AjaxResult.ok(appUserAddressService.getOne(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, userId)
-                .eq(TAppUserAddress::getDefaultAddress,1)));
+        TAppUserAddress appUserAddress = appUserAddressService.getOne(Wrappers.<TAppUserAddress>lambdaQuery().eq(TAppUserAddress::getAppUserId, userId)
+                .eq(TAppUserAddress::getDefaultAddress, 1));
+        appUserAddress.setUid(appUserAddress.getId().toString());
+        return AjaxResult.ok(appUserAddress);
     }
 
 
@@ -85,6 +89,20 @@
     /**
      * 修改用户地址
      */
+    @ApiOperation(tags = {"小程序-用户地址"},value = "设置默认地址")
+    @GetMapping(value = "/setDefaultAddress")
+    public AjaxResult<String> setDefaultAddress(@RequestParam(value = "id") Long  id) {
+        // 修改用户默认地址
+        appUserAddressService.updateDefaultAddress(1,tokenService.getLoginUserApplet().getUserId());
+        TAppUserAddress appUserAddress = appUserAddressService.getById(id);
+        appUserAddress.setDefaultAddress(1);
+        appUserAddressService.updateById(appUserAddress);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 修改用户地址
+     */
     @ApiOperation(tags = {"小程序-用户地址"},value = "修改用户地址")
     @PostMapping(value = "/update")
     public AjaxResult<Boolean> update(@RequestBody TAppUserAddress dto) {
@@ -94,6 +112,17 @@
     }
 
     /**
+     * 通过地址id 查询地址信息
+     * @param id
+     * @return
+     */
+    @ApiOperation(tags = {"小程序-用户地址"},value = "查询用户地址详情")
+    @GetMapping(value = "/getDetailById")
+    public R<TAppUserAddress> getDetailById(@RequestParam(value = "id")Long id) {
+        return R.ok(appUserAddressService.getById(id));
+    }
+
+    /**
      * 删除用户地址
      */
     @ApiOperation(tags = {"小程序-用户地址"},value = "删除用户地址")
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
index 776fb34..a106416 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TAppUserController.java
@@ -340,6 +340,7 @@
             //累计充电次数
             R<Long> useOrderCount = chargingOrderClient.useOrderCount(appUser.getId());
             appUser.setOrderCount(useOrderCount.getData());
+            appUser.setUid(appUser.getId().toString());
 
         }
         return R.ok(page);
@@ -512,7 +513,7 @@
             appUserInfoDto.setVipExpireTime(byId.getVipEndTime());
         }
         //判断当天是否签到
-        Long count = signService.lambdaQuery().eq(TAppUserSign::getSignDay, LocalDate.now()).count();
+        Long count = signService.lambdaQuery().eq(TAppUserSign::getAppUserId,userId).eq(TAppUserSign::getSignDay, LocalDate.now()).count();
         appUserInfoDto.setIsSign(count>0?1:0);
         //获取当前拥有的优惠卷数量
         Long coupons = appCouponService.lambdaQuery().eq(TAppCoupon::getAppUserId, userId).eq(TAppCoupon::getStatus, 1).count();
@@ -524,30 +525,62 @@
         }
         appUserInfoDto.setUserCars(list);
         appUserInfoDto.setFirstAdd(byId.getFirstAdd()!=null?byId.getFirstAdd():0);
+        appUserInfoDto.setPoints(byId.getPoints()==null?0:byId.getPoints());
         return R.ok(appUserInfoDto);
 
 
     }
 
     @ApiOperation(value = "优惠卷列表不分页(1可使用2不可用)", tags = {"小程序-个人中心"})
-    @PostMapping(value = "/user/coupon")
-    public R<List<InfoCouponDto>> userCoupon(@RequestParam("type") Integer type) {
+    @GetMapping(value = "/user/coupon")
+    public R<ListInfoCouponDto> userCoupon(@RequestParam("type") Integer type) {
+        Long userId = tokenService.getLoginUserApplet().getUserId();
         LocalDateTime now = LocalDateTime.now();
 
-        List<InfoCouponDto> couponDtos = new ArrayList<>();
-        List<TAppCoupon> list = appCouponService.lambdaQuery().le(TAppCoupon::getStartTime, now).ge(TAppCoupon::getEndTime, now).eq(TAppCoupon::getStatus, type).list();
-        for (TAppCoupon tAppCoupon : list) {
+        List<InfoCouponDto> couponDtos1 = new ArrayList<>();
+
+            List<TAppCoupon> list = appCouponService.lambdaQuery().eq(TAppCoupon::getAppUserId, userId).ge(TAppCoupon::getEndTime, now).eq(TAppCoupon::getStatus, 1).list();
+            for (TAppCoupon tAppCoupon : list) {
+                TCoupon coupon = JSON.toJavaObject(JSON.parseObject(tAppCoupon.getCouponJson()), TCoupon.class);
+                InfoCouponDto infoCouponDto = new InfoCouponDto();
+                BeanUtils.copyProperties(coupon, infoCouponDto);
+                infoCouponDto.setId(tAppCoupon.getId());
+                infoCouponDto.setEndTime(tAppCoupon.getEndTime());
+                couponDtos1.add(infoCouponDto);
+
+            }
+
+        List<TAppCoupon> list1 = appCouponService.lambdaQuery().eq(TAppCoupon::getAppUserId, userId).eq(TAppCoupon::getStatus, 2).list();
+        List<TAppCoupon> list2 = appCouponService.lambdaQuery().eq(TAppCoupon::getAppUserId, userId).lt(TAppCoupon::getEndTime, now).list();
+
+        List<InfoCouponDto> couponDtos2 = new ArrayList<>();
+        for (TAppCoupon tAppCoupon : list1) {
             TCoupon coupon = JSON.toJavaObject(JSON.parseObject(tAppCoupon.getCouponJson()), TCoupon.class);
             InfoCouponDto infoCouponDto = new InfoCouponDto();
-            BeanUtils.copyProperties(coupon,infoCouponDto);
+            BeanUtils.copyProperties(coupon, infoCouponDto);
             infoCouponDto.setId(tAppCoupon.getId());
-            couponDtos.add(infoCouponDto);
-
+            infoCouponDto.setEndTime(tAppCoupon.getEndTime());
+            couponDtos2.add(infoCouponDto);
+        }
+        for (TAppCoupon tAppCoupon : list2) {
+            TCoupon coupon = JSON.toJavaObject(JSON.parseObject(tAppCoupon.getCouponJson()), TCoupon.class);
+            InfoCouponDto infoCouponDto = new InfoCouponDto();
+            BeanUtils.copyProperties(coupon, infoCouponDto);
+            infoCouponDto.setId(tAppCoupon.getId());
+            infoCouponDto.setEndTime(tAppCoupon.getEndTime());
+            couponDtos2.add(infoCouponDto);
         }
 
 
-        return R.ok(couponDtos);
-
+        ListInfoCouponDto listInfoCouponDto = new ListInfoCouponDto();
+        if (type==1){
+            listInfoCouponDto.setInfoCouponDtoList(couponDtos1);
+        }else {
+            listInfoCouponDto.setInfoCouponDtoList(couponDtos2);
+        }
+        listInfoCouponDto.setNum1(couponDtos1.size());
+        listInfoCouponDto.setNum2(couponDtos2.size());
+        return R.ok(listInfoCouponDto);
 
     }
 
@@ -784,6 +817,15 @@
         return R.ok();
     }
 
+    @PostMapping(value = "/user/points/change/down")
+    public R changeDown(@RequestBody PointChangeDto points) {
+        TAppUser byId = appUserService.getById(points.getUserId());
+        pointDetailUtil.addDetail(byId.getPoints(),byId.getPoints()-points.getPoints(),points.getType(),points.getUserId(),points.getRemark(),"JF");
+        byId.setPoints(byId.getPoints()-points.getPoints());
+        appUserService.updateById(byId);
+        return R.ok();
+    }
+
     @ApiOperation(value = "添加编辑车辆", tags = {"小程序-个人中心-车辆"})
     @PostMapping(value = "/user/car/addOrUpdate")
     public R carAdd(@RequestBody TAppUserCar appUserCar) {
@@ -834,7 +876,7 @@
         return R.ok();
     }
     @ApiOperation(value = "添加编辑车辆", tags = {"小程序-个人中心-车辆"})
-    @DeleteMapping(value = "/user/car/delete")
+    @GetMapping(value = "/user/car/delete")
     public R carDelete(String id) {
         boolean b = appUserCarService.removeById(id);
         return R.ok();
@@ -875,15 +917,26 @@
     public R getSeries(String id) throws Exception {
         String modelById = CarBrandUtil.getSeriesById(id);
         JSONObject jsonObject = JSON.parseObject(modelById);
-        JSONArray data = jsonObject.getJSONArray("data");
-        JSONArray backList = new JSONArray();
-        for (Object datum : data) {
-            JSONObject jsonObject1 = JSON.parseObject(datum.toString());
-            JSONArray list = jsonObject1.getJSONArray("list");
-            backList.addAll(list);
-        }
-        return R.ok(backList);
+        JSONObject data1 = jsonObject.getJSONObject("data");
+        JSONArray data = data1.getJSONArray("list");
+//        JSONArray data = jsonObject.getJSONArray(data1.get("list").toString());
+//        JSONArray backList = new JSONArray();
+//        for (Object datum : data) {
+//            JSONObject jsonObject1 = JSON.parseObject(datum.toString());
+//            JSONArray list = jsonObject1.getJSONArray("list");
+//            backList.addAll(jsonObject1);
+//        }
+        return R.ok(data);
 
     }
+
+    @ApiOperation(value = "根据车型获取详情", tags = {"小程序-个人中心-车辆"})
+    @GetMapping(value = "/user/car/getDetail")
+    public R getDetail(String id) throws Exception {
+        String detailById = CarBrandUtil.getDetailById(id);
+        JSONObject jsonObject = JSON.parseObject(detailById);
+
+        return R.ok(jsonObject.getJSONObject("data"));
+    }
 }
 
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java
index 568c5c6..3327e7d 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/util/carBrand/CarBrandUtil.java
@@ -172,4 +172,58 @@
         }
         return "";
     }
+
+
+    public static   String getDetailById(String brandId) throws Exception {
+        // Create a new request.
+        Request httpClientRequest = new Request();
+        try {
+            // Set the request parameters.
+            // AppKey, AppSecrect, Method and Url are required parameters.
+            // Directly writing AK/SK in code is risky. For security, encrypt your AK/SK and store them in the configuration file or environment variables.
+            // In this example, the AK/SK are stored in environment variables for identity authentication.
+            // Before running this example, set environment variables HUAWEICLOUD_SDK_AK and HUAWEICLOUD_SDK_SK.
+            httpClientRequest.setKey("9a4a2b69afe141718f6843c5d39961ec");
+            httpClientRequest.setSecret("541845f206324bbc933065b44fc98c47");
+            httpClientRequest.setMethod("POST");
+            // Set a request URL in the format of https://{Endpoint}/{URI}.
+            httpClientRequest.setUrl("https://vehiclequery.apistore.huaweicloud.com/vehicle/query/detail");
+            httpClientRequest.addHeader("Content-Type", "text/plain");
+            httpClientRequest.addQueryStringParam("modelId",brandId);
+            // Set a body for http request.
+//            httpClientRequest.setBody("put your request body here");
+        } catch (Exception e) {
+//            LOGGER.error(e.getMessage());
+            return "";
+        }
+        CloseableHttpClient client = null;
+        try {
+            // Sign the request.
+            HttpRequestBase signedRequest = Client.sign(httpClientRequest, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256);
+            if (Constant.DO_VERIFY) {
+                // creat httpClient and verify ssl certificate
+                HostName.setUrlHostName(httpClientRequest.getHost());
+                client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClientWithVerify(Constant.INTERNATIONAL_PROTOCOL);
+            } else {
+                // creat httpClient and do not verify ssl certificate
+                client = (CloseableHttpClient) SSLCipherSuiteUtil.createHttpClient(Constant.INTERNATIONAL_PROTOCOL);
+            }
+            HttpResponse response = client.execute(signedRequest);
+            // Print the body of the response.
+            HttpEntity resEntity = response.getEntity();
+            if (resEntity != null) {
+//                LOGGER.info("Processing Body with name: {} and value: {}", System.getProperty("line.separator"),
+//                        EntityUtils.toString(resEntity, "UTF-8"));
+                String string = EntityUtils.toString(resEntity, "UTF-8");
+                return string;
+            }
+        } catch (Exception e) {
+            LOGGER.error(e.getMessage());
+        } finally {
+            if (client != null) {
+                client.close();
+            }
+        }
+        return "";
+    }
 }
diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppUserAddressMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppUserAddressMapper.xml
index c8ffb59..7e582cd 100644
--- a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppUserAddressMapper.xml
+++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TAppUserAddressMapper.xml
@@ -8,9 +8,14 @@
         <result column="app_user_id" property="appUserId" />
         <result column="name" property="name" />
         <result column="phone" property="phone" />
+        <result column="province" property="province" />
+        <result column="provinceCode" property="provinceCode" />
         <result column="city" property="city" />
         <result column="city_code" property="cityCode" />
+        <result column="district" property="district" />
+        <result column="district_code" property="districtCode" />
         <result column="address" property="address" />
+        <result column="house_number" property="houseNumber" />
         <result column="lon" property="lon" />
         <result column="lat" property="lat" />
         <result column="default_address" property="defaultAddress" />
@@ -20,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, app_user_id, name, phone, city, city_code, address, lon, lat, default_address, create_time, del_flag
+        id, app_user_id, name, phone, province,provinceCode,city, city_code,district,district_code, address,house_number, lon, lat, default_address, create_time, del_flag
     </sql>
 
 </mapper>
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
index 721c8ba..2c79bee 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TExchangeOrderController.java
@@ -195,26 +195,21 @@
         String[] split = goodsIds.split("-");
         // 取出最后一位字符 类型1查询现金购买 类型2查询积分兑换
         String s = split[split.length - 1];
+        String[] split1 = split[0].split(",");
         List<Integer> res = new ArrayList<>();
         switch (Integer.parseInt(s)){
             case 1:
-                for (int i = 0; i < split.length-1; i++) {
+                for (int i = 0; i < split1.length; i++) {
                     Integer reduce = tShoppingOrderService.list(new QueryWrapper<TShoppingOrder>()
                                     .eq("order_type",1)
-                                    .eq("goods_id", split[i])
-                                    .eq("payment_status", 2)
                                     .ne("refund_status", 2))
                             .stream().map(TShoppingOrder::getPurchaseQuantity).reduce(0, Integer::sum);
                     res.add(reduce);
                 }
                 break;
             case 2:
-                for (int i = 0; i < split.length-1; i++) {
-                    Integer reduce = exchangeOrderService.list(new QueryWrapper<TExchangeOrder>()
-                                            .eq("order_type",1)
-                                    .ne("status",4)
-                                    .eq("goods_id", split[i])
-                                    )
+                for (int i = 0; i < split1.length; i++) {
+                    Integer reduce = exchangeOrderService.list(new QueryWrapper<TExchangeOrder>().eq("order_type",1).ne("status",4).eq("goods_id", split1[i]))
                             .stream().map(TExchangeOrder::getPurchaseQuantity).reduce(0, Integer::sum);
                     res.add(reduce);
                 }
@@ -282,7 +277,7 @@
             tExchangeOrder.setCouponId(exchangeDto.getGoodId());
         }
         tExchangeOrder.setPurchaseQuantity(1);
-        tExchangeOrder.setAppUserAddressId(Long.valueOf(exchangeDto.getAddressId()));
+        tExchangeOrder.setAppUserAddressId(exchangeDto.getAddressId()==null?null:Long.valueOf(exchangeDto.getAddressId()));
         tExchangeOrder.setPoints(exchangeDto.getPoint());
         tExchangeOrder.setRemark("");
         if (exchangeDto.getGoodType()==1){
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
index 99efbec..196a5ce 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java
@@ -502,7 +502,9 @@
 		 BigDecimal electronicMoney = new BigDecimal("0");
 		 BigDecimal serviceMoney = new BigDecimal("0");
 		for (ChargingOrderVO chargingOrderVO : list) {
-			total = total.add(chargingOrderVO.getChargingCapacity());
+			if (chargingOrderVO.getChargingCapacity()!=null){
+				total = total.add(chargingOrderVO.getChargingCapacity());
+			}
 			// 充电订单 明细记录
 			List<TChargingOrderAccountingStrategy> chargingOrderId = chargingOrderAccountingStrategyService.list(new QueryWrapper<TChargingOrderAccountingStrategy>()
 					.eq("charging_order_id", chargingOrderVO.getId()));
@@ -513,14 +515,18 @@
 			LocalDateTime startTime = chargingOrderVO.getStartTime();
 			LocalDateTime endTime = chargingOrderVO.getEndTime();
 			// 计算时间差 秒 充电时长
-			long between = ChronoUnit.SECONDS.between(startTime, endTime);
-			chargingOrderVO.setChargingSecond(between);
-			time += between;
+			if (startTime!=null && endTime!=null){
+				long between = ChronoUnit.SECONDS.between(startTime, endTime);
+				chargingOrderVO.setChargingSecond(between);
+				time += between;
+			}
 			// 总收入
-			if (chargingOrderVO.getRefundStatus() == 2){
+			if (chargingOrderVO.getRefundStatus() !=null && chargingOrderVO.getRefundStatus() == 2){
 				income = income.add(chargingOrderVO.getPaymentAmount().subtract(chargingOrderVO.getRefundAmount()));
 			}else{
-				income = income.add(chargingOrderVO.getPaymentAmount());
+				if (chargingOrderVO.getPaymentAmount()!=null){
+					income = income.add(chargingOrderVO.getPaymentAmount());
+				}
 			}
 			for (TChargingOrderAccountingStrategy tChargingOrderAccountingStrategy : chargingOrderId) {
 				// 累计电费
@@ -542,11 +548,14 @@
 				// 车牌号
 				chargingOrderVO.setPhone(data.getPhone());
 				List<Long> longs = new ArrayList<>();
-				longs.add(chargingOrderVO.getAppUserCarId());
-				List<TAppUserCar> data1 = appUserCarClient.getCarByIds(longs).getData();
-				if (!data1.isEmpty()){
-					chargingOrderVO.setLicensePlate(data1.get(0).getLicensePlate());
+				if (chargingOrderVO.getAppUserCarId()!=null){
+					longs.add(chargingOrderVO.getAppUserCarId());
+					List<TAppUserCar> data1 = appUserCarClient.getCarByIds(longs).getData();
+					if (!data1.isEmpty()){
+						chargingOrderVO.setLicensePlate(data1.get(0).getLicensePlate());
+					}
 				}
+
 			}
 		}
 		tCharingOrderVO.setTotal(total);
diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java
index 9b71839..d554e24 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TExchangeOrderServiceImpl.java
@@ -86,7 +86,7 @@
 				name = goods.getName();
 				imgUrl = goods.getCoverPicture();
 			}else{
-				TCoupon coupon = couponClient.getCouponById1(tExchangeOrder.getGoodsId()).getData();
+				TCoupon coupon = couponClient.getCouponById1(tExchangeOrder.getCouponId()).getData();
 				name = coupon.getName();
 				imgUrl = coupon.getCoverPicture();
 			}
@@ -122,7 +122,7 @@
 			name = goods.getName();
 			imgUrl = goods.getCoverPicture();
 		}else{
-			TCoupon coupon = couponClient.getCouponById1(exchangeOrder.getGoodsId()).getData();
+			TCoupon coupon = couponClient.getCouponById1(exchangeOrder.getCouponId()).getData();
 			info.setCouponType(coupon.getType());
 			info.setDays(coupon.getDays());
 			info.setEndTime(coupon.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
index 792106f..34d1ff5 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TCouponController.java
@@ -197,5 +197,12 @@
         return R.ok(coupon);
     }
 
+    @PostMapping(value = "/getCouponById")
+    public R<TCoupon> getCouponById(@RequestParam("id") Integer id){
+        TCoupon coupon = tCouponService.getById(id);
+        return R.ok(coupon);
+    }
+
+
 }
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
index 004ff33..6021c3a 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TGoodsController.java
@@ -110,10 +110,25 @@
 
 
     @GetMapping("/getInfo")
-    @ApiOperation(tags = {"管理后台-商品管理","小程序-兑换商城"},value = "商品查看详情")
+    @ApiOperation(tags = {"管理后台-商品管理"},value = "商品查看详情")
     public AjaxResult<TGoods> getInfo(Integer id) {
-        return AjaxResult.ok(goodsService.getById(id));
+        TGoods byId = goodsService.getById(id);
+        return AjaxResult.ok(byId);
     }
+
+
+    @GetMapping("/getInfoByType")
+    @ApiOperation(tags = {"小程序-兑换商城"},value = "商品查看详情")
+    public AjaxResult getInfoByType(Integer goodType,Integer id) {
+        if (goodType==1){
+        TGoods byId = goodsService.getById(id);
+        return AjaxResult.ok(byId);}
+        else {
+            TCoupon byId = couponService.getById(id);
+            return AjaxResult.ok(byId);
+    }
+    }
+
 
 
 
@@ -130,6 +145,40 @@
         return AjaxResult.ok(goodsService.pageList1(appGoodQuery));
     }
 
+
+
+    @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品检查数量")
+    @PostMapping(value = "/app/shop/check")
+    public R check(@RequestBody ExchangeDto exchangeDto) {
+        //检查当前用户积分是否够
+        Long userId = tokenService.getLoginUserApplet().getUserId();
+        Integer point = 0;
+
+        if (exchangeDto.getGoodType()==1) {
+            //查询当前商品信息
+            TGoods good = goodsService.getById(exchangeDto.getGoodId());
+            point = good.getRedeemPoints();
+            //检查当前用户是否到达兑换上限
+            Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
+            if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) {
+                return R.fail("当前用户已兑换"+count+"张");
+            }
+            TAppUser user = appUserClient.getUserById(userId).getData();
+            if (user.getPoints()<good.getRedeemPoints()){
+                return R.fail("当前用户积分不足");
+            }
+        }else {
+            TCoupon coupon = couponService.getById(exchangeDto.getGoodId());
+            point = coupon.getRedeemPoints();
+
+            Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
+            if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) {
+                return R.fail("当前用户已到达兑换"+coupon+"次");
+            }
+    }
+        return R.ok();
+
+    }
     @ApiOperation(tags = {"小程序-兑换商城"},value = "积分兑换商品")
     @PostMapping(value = "/app/shop")
     public AjaxResult<PageInfo<TGoods>> shop(@RequestBody ExchangeDto exchangeDto) {
@@ -144,7 +193,7 @@
             //检查当前用户是否到达兑换上限
             Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
             if (good.getLimitExchangeTimes() != -1 && count >= good.getLimitExchangeTimes()) {
-                return AjaxResult.error("当前用户已到达兑换上限");
+                return AjaxResult.error("当前用户已兑换"+count+"张");
             }
         TAppUser user = appUserClient.getUserById(userId).getData();
         if (user.getPoints()<good.getRedeemPoints()){
@@ -156,10 +205,11 @@
 
             Long count = orderClient.getExchangeById(exchangeDto.getGoodId(), userId,exchangeDto.getGoodType()).getData();
             if (coupon.getInventoryQuantity() != -1 && count >= coupon.getInventoryQuantity()) {
-                return AjaxResult.error("当前用户已到达兑换上限");
+                return AjaxResult.error("当前用户已到达兑换"+coupon+"次");
             }
         }
         exchangeDto.setPoint(point);
+        exchangeDto.setUserId(userId);
         //生成积分兑换成功的订单
         R<Long> longR = orderClient.exchangeCreate(exchangeDto);
         if (exchangeDto.getGoodType()==2) {
@@ -177,7 +227,7 @@
         pointChangeDto.setPoints(point);
         pointChangeDto.setRemark(longR.getData().toString());
         pointChangeDto.setType(6);
-        appUserClient.change(pointChangeDto);
+        appUserClient.changeDown(pointChangeDto);
         return AjaxResult.success();
 
 
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
index e0a0fae..b60c3de 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/TVipController.java
@@ -25,6 +25,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -143,19 +144,34 @@
 
 
     @ApiOperation(value = "会员信息", tags = {"小程序-个人中心"})
-    @PostMapping("/vipInfo")
-    public AjaxResult<VipInfoDto> vipInfo() {
+    @GetMapping("/vipInfo")
+    public R<List<VipInfoDto>> vipInfo() {
         List<VipInfoDto> vipInfoDtos = new ArrayList<>();
         List<TVip> vips = vipService.lambdaQuery().eq(TVip::getReveal, 1).list();
+        LocalDateTime now = LocalDateTime.now();
         for (TVip vip : vips) {
             VipInfoDto vipInfoDto = new VipInfoDto();
             vipInfoDto.setMonthlyCard(vip.getMonthlyCardReveal()==1?vip.getMonthlyCard():null);
             vipInfoDto.setSeasonCard(vip.getSeasonCardReveal()==1?vip.getSeasonCard():null);
             vipInfoDto.setAnnualCard(vip.getAnnualCardReveal()==1?vip.getAnnualCard():null);
+            //判断是否在折扣时间内,然后设置折扣价格
+            if (vip.getMonthlyCardDiscountStart()!=null&&(now.isAfter(vip.getMonthlyCardDiscountStart())&&now.isBefore(vip.getMonthlyCardDiscountEnd()))){
+                vipInfoDto.setMonthlyCardDiscount(vip.getMonthlyCardDiscount());
+            }
+            if (vip.getSeasonCardDiscountStart()!=null&&(now.isAfter(vip.getSeasonCardDiscountStart())&&now.isBefore(vip.getSeasonCardDiscountEnd()))){
+                vipInfoDto.setSeasonCardDiscount(vip.getSeasonCardDiscount());
+            }
+            if (vip.getAnnualCardDiscountStart()!=null&&(now.isAfter(vip.getAnnualCardDiscountStart())&&now.isBefore(vip.getAnnualCardDiscountEnd()))){
+                vipInfoDto.setAnnualCardDiscount(vip.getAnnualCardDiscount());
+            }
+
+
+
             vipInfoDto.setMaximumDeduction(vip.getMaximumDeduction());
             vipInfoDto.setDiscountTimes(vip.getDiscountTimes());
             vipInfoDto.setDoubleIntegration(vip.getDoubleIntegration());
             vipInfoDto.setMallExclusivePrice(vip.getMallExclusivePrice());
+            vipInfoDto.setName(vip.getName());
             List<SendCouponDto> javaList = JSON.parseArray(vip.getCoupon()).toJavaList(SendCouponDto.class);
             List<VipCouponDto> vipCouponDtos = new ArrayList<>();
             if (!javaList.isEmpty()){
@@ -175,12 +191,13 @@
             total = total.add(vip.getMaximumDeduction().multiply(BigDecimal.valueOf(vip.getDiscountTimes())));
             for (VipCouponDto vipCouponDto : vipCouponDtos) {
                 TCoupon tCoupon = vipCouponDto.getTCoupon();
-                total.add(tCoupon.getDiscount());
+                total.add(tCoupon.getMaximumDiscountAmount());
             }
             vipInfoDto.setTotalDiscount(total);
+            vipInfoDto.setTimeAmount(vip.getMaximumDeduction().multiply(BigDecimal.valueOf(vip.getDiscountTimes())));
             vipInfoDtos.add(vipInfoDto);
         }
-        return AjaxResult.success(vipInfoDtos);
+        return R.ok(vipInfoDtos);
     }
 
 }
diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
index 7a58640..b9f434d 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/TGoodsServiceImpl.java
@@ -83,10 +83,10 @@
         // 订单号加上商品类型
         String res = string+"-"+dto.getType();
 
-        List<Integer> data = orderClient.getSalesCountByGoodsId(res).getData();
-        for (int i = 0; i < list.size(); i++) {
-            list.get(i).setSalesCount(data.get(i));
-        }
+//        List<Integer> data = orderClient.getSalesCountByGoodsId(res).getData();
+//        for (int i = 0; i < list.size(); i++) {
+//            list.get(i).setSalesCount(data.get(i));
+//        }
         pageInfo.setRecords(list);
         return pageInfo;
     }
diff --git a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
index 417dd0b..fb2632b 100644
--- a/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
+++ b/ruoyi-service/ruoyi-other/src/main/resources/mapper/other/TGoodsMapper.xml
@@ -52,23 +52,23 @@
 
     <select id="pageList1" resultType="com.ruoyi.other.api.domain.TGoods">
         SELECT
-            id,name,redeem_points,inventory,original_price,preferential_price,vip_price
+            id,name,redeem_points as redeemPoints,inventory,original_price as originalPrice ,preferential_price as preferentialPrice,vip_price as vipPrice,1 as goodType,cover_picture as coverPicture
         FROM
             t_goods
         WHERE `status` = 1 and del_flag = 0 and type = #{appGoodQuery.type}
         UNION ALL
         SELECT
-            id,name,redeem_points,inventory_quantity as inventory,payment_amount as preferential_price,vip_payment_amount as vip_price
+            id,name,redeem_points  as redeemPoints,inventory_quantity as inventory,payment_amount as originalPrice,payment_amount as preferentiaPrice,vip_payment_amount as vipPrice,2 as goodType,cover_picture as coverPicture
         FROM
             t_coupon
-        WHERE `status`= 1 and del_flag = 0 and type = #{appGoodQuery.type}
+        WHERE `status`= 1 and del_flag = 0 and ways_to_obtain != #{appGoodQuery.type}
         ORDER BY
             CASE
 
                 WHEN `inventory` = 0 THEN
                     0 ELSE 1
                 END DESC,
-            `redeem_points` ASC;
+            `redeemPoints` ASC
     </select>
 
 </mapper>

--
Gitblit v1.7.1