skyline vor 2 Jahren
Ursprung
Commit
19232ed089

+ 1 - 1
admin/src/main/resources/application.yml

@@ -27,7 +27,7 @@ spring:
       strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
       datasource:
         db-admin:
-          url: jdbc:mysql://121.40.98.15:3307/charge_admin?tinyInt1isBit=false
+          url: jdbc:mysql://121.40.98.15:3307/charge_admin?tinyInt1isBit=false&serverTimezone=Asia/Shanghai
           username: root
           password: 123456
           driver-class-name: com.mysql.cj.jdbc.Driver

+ 3 - 0
common/src/main/java/com/kym/common/constant/ResponseEnum.java

@@ -23,6 +23,9 @@ public enum ResponseEnum implements BusinessExceptionAssert {
     // 微信小程序
     WX_MP_LOGIN_ERROR(301, "微信登录异常"),
 
+    // 微信支付
+    WX_PAY_AMOUNT_ERROR(300001,"微信支付金额异常"),
+
 
     // 登录
     LOGIN_FAILED(10001, "用户名或密码错误"),

+ 1 - 1
common/src/main/java/com/kym/common/enums/EnPlusApi.java

@@ -24,7 +24,7 @@ public enum EnPlusApi implements Api {
     EN_PLUS_QUERY_STATION_STATS(Constants.DOMAIN + "query_station_stats", RequestMethod.POST), // 站点统计
     //充电
     EN_PLUS_QUERY_EQUIP_AUTH(Constants.DOMAIN + "query_equip_auth", RequestMethod.POST), // 请求设备认证
-    EN_PLUS_QUERY_BUSINESS_POLICY(Constants.DOMAIN + "query_business_policy", RequestMethod.POST), // 查询业务策略信息
+    EN_PLUS_QUERY_EQUIP_BUSINESS_POLICY(Constants.DOMAIN + "query_equip_business_policy", RequestMethod.POST), // 查询业务策略信息
     EN_PLUS_QUERY_START_CHARGE(Constants.DOMAIN + "query_start_charge", RequestMethod.POST), // 查询启动充电
     EN_PLUS_QUERY_STOP_CHARGE(Constants.DOMAIN + "query_stop_charge", RequestMethod.POST), // 请求停止充电
     EN_PLUS_QUERY_EQUIP_CHARGE_STATUS(Constants.DOMAIN + "query_equip_charge_status", RequestMethod.POST), // 查询设备充电状态

+ 9 - 2
common/src/main/java/com/kym/common/utils/OrderUtils.java

@@ -14,14 +14,21 @@ public class OrderUtils {
 
     // 生成24位唯一订单号码,格式:YYYY-MMDD-HHII-SS-NNNN,NNNN-CC,
     // 其中:YYYY=年份,MM=月份,DD=日期,HH=24格式小时,II=分,SS=秒,NNNNNNNN=随机数,CC=检查码
-    public static String getOrderNo() {
+
+    /**
+     * 生成订单号
+     * @param str 一般只会传OperatorID
+     * @return
+     */
+    public static String getOrderNo(String... str) {
         var orderNoMain = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")).concat(String.valueOf(RandomUtil.randomInt(10000000, 99999999)));
         var orderNoSum = 0;
         for (int i = 0; i < orderNoMain.length(); i++) {
             orderNoSum += Integer.parseInt(orderNoMain.substring(0, 1));
         }
         var j = (100 - orderNoSum % 100) % 100;
-        return orderNoMain.concat(str_pad(String.valueOf((100 - orderNoSum % 100) % 100), 2, "0", "STR_PAD_LEFT"));
+        var res = orderNoMain.concat(str_pad(String.valueOf((100 - orderNoSum % 100) % 100), 2, "0", "STR_PAD_LEFT"));
+        return str.length > 0 ? str[0].concat(res) : res;
     }
 
 

+ 13 - 2
entity/src/main/java/com/kym/entity/enplus/response/EnBusinessPolicy.java

@@ -1,5 +1,7 @@
 package com.kym.entity.enplus.response;
 
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.annotation.JSONCreator;
 import com.alibaba.fastjson2.annotation.JSONField;
 import com.kym.entity.enplus.EnPolicyInfo;
 import lombok.Data;
@@ -42,6 +44,15 @@ public class EnBusinessPolicy {
      */
     @JSONField(name = "SumPeriod")
     private Integer sumPeriod;
-    @JSONField(name = "PolicyInfos")
-    private List<EnPolicyInfo> policyInfos;
+    /**
+     * 单项业务策略信息
+     */
+    private List<EnPolicyInfo> policyInfoss;
+
+    @JSONCreator
+    EnBusinessPolicy(@JSONField(name = "PolicyInfos") JSONArray array) {
+        this.policyInfoss = array.toJavaList(EnPolicyInfo.class);
+    }
+
+
 }

+ 0 - 2
entity/src/main/java/com/kym/entity/miniapp/vo/UserVo.java

@@ -1,7 +1,5 @@
 package com.kym.entity.miniapp.vo;
 
-import com.alibaba.fastjson2.annotation.JSONField;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 

+ 8 - 5
miniapp/src/main/java/com/kym/miniapp/controller/ChargerController.java

@@ -57,7 +57,8 @@ public class ChargerController {
         return R.success(response);
     }
 
-    @SysLog("充电详情")
+    // TODO: 2023-08-16 挪到admin
+    @SysLog("充电站数据统计")
     @GetMapping("/stationStatusDetail")
     R stationStatusDetail(@RequestParam("stationId") String stationId,
                           @RequestParam("startTime") @DateTimeFormat(pattern = "yyyy-MM-dd") String startTime,
@@ -92,9 +93,10 @@ public class ChargerController {
         return R.success(chargeService.queryEquipChargeStatus(startChargeSeq));
     }
 
-    R businessPolicy(){
-
-        return R.success();
+    @SysLog("查询设备充电策略")
+    @GetMapping("/businessPolicy/{connectorId}")
+    R businessPolicy(@PathVariable("connectorId") String connectorId) {
+        return R.success(chargeService.queryEquipBusinessPolicy(connectorId));
     }
 
     //====================================================以上是请求EN+接口==============================================================
@@ -170,7 +172,8 @@ public class ChargerController {
 
 
     //====================================================以下是手动同步数据接口==============================================================
-    // TODO: 2023-08-14  开发运营后台时挪到admin模块
+    // TODO: 2023-08-14 挪到admin
+
     /**
      * 拉取EN+充电站信息数据并更新本地服务器数据
      *

+ 7 - 10
miniapp/src/main/java/com/kym/miniapp/controller/PaymentController.java

@@ -1,14 +1,11 @@
 package com.kym.miniapp.controller;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.kym.common.R;
 import com.kym.service.wechat.WxPayService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.math.BigDecimal;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @author skyline
@@ -16,16 +13,16 @@ import java.math.BigDecimal;
  * @date 2023-07-22 20:36
  */
 @RestController
-@RequestMapping("/pay")
+@RequestMapping("/payment")
 public class PaymentController {
 
     @Autowired
     private WxPayService wxPayService;
 
-    @GetMapping("/getId")
+    @PostMapping("/prepay")
     @ResponseBody
-    R getId() {
-        return R.success(wxPayService.prepay(BigDecimal.valueOf(0.01), "oK-oR5gAn9hrYNim4x64l4kzmMXs"));
+    R prepay(@RequestBody JSONObject params) {
+        return R.success(wxPayService.prepay(params));
     }
 
 

+ 4 - 3
miniapp/src/main/java/com/kym/miniapp/controller/UserController.java

@@ -1,6 +1,7 @@
 package com.kym.miniapp.controller;
 
 import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageInfo;
 import com.kym.common.R;
 import com.kym.common.annotation.SysLog;
@@ -101,10 +102,10 @@ public class UserController {
         return R.success(collectService.listCollect());
     }
 
-    @SysLog("收藏")
+    @SysLog("添加/取消收藏")
     @PostMapping("/collect")
-    R saveCollect(@RequestParam String stationId, Integer status) {
-        collectService.updateCollect(stationId, status);
+    R saveCollect(@RequestBody JSONObject json) {
+        collectService.updateCollect(json.getString("stationId"), json.getInteger("status"));
         return R.success();
     }
 

+ 3 - 0
service/src/main/java/com/kym/service/admin/StationService.java

@@ -1,6 +1,8 @@
 package com.kym.service.admin;
 
+import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.kym.entity.admin.Station;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -27,4 +29,5 @@ public interface StationService extends IService<Station> {
 
     @Transactional(rollbackFor = Exception.class)
     public void pullEnStationInfos();
+
 }

+ 10 - 0
service/src/main/java/com/kym/service/admin/impl/StationServiceImpl.java

@@ -63,6 +63,15 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
         return enStationStatus.getJSONArray("StationStatusInfos").toJavaList(EnStationStatusInfo.class);
     }
 
+
+    /**
+     * 充电桩统计
+     *
+     * @param stationId
+     * @param startTime
+     * @param endTime
+     * @return
+     */
     @Override
     public JSONObject stationStats(String stationId, String startTime, String endTime) {
         var param = """
@@ -77,6 +86,7 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
         return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
+
     /**
      * 拉取EN+充电站信息数据并更新本地服务器数据
      */

+ 1 - 1
service/src/main/java/com/kym/service/enplus/impl/EnPlusServiceImpl.java

@@ -227,7 +227,7 @@ public class EnPlusServiceImpl implements EnPlusService {
                     "ConnectorID":%s
                 }
                 """.formatted(equipBizSeq, connectorId);
-        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_BUSINESS_POLICY.getApi(), buildParams(param));
+        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_EQUIP_BUSINESS_POLICY.getApi(), buildParams(param));
         return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 

+ 2 - 1
service/src/main/java/com/kym/service/miniapp/ChargeService.java

@@ -1,5 +1,6 @@
 package com.kym.service.miniapp;
 
+import com.kym.entity.enplus.response.EnBusinessPolicy;
 import com.kym.entity.miniapp.ChargeOrder;
 
 /**
@@ -15,5 +16,5 @@ public interface ChargeService {
 
     void queryStopCharge(String startChargeSeq, String connectorId);
 
-    void queryEquipBusinessPolicy(String connectorId);
+    EnBusinessPolicy queryEquipBusinessPolicy(String connectorId);
 }

+ 15 - 6
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -163,6 +163,12 @@ public class ChargeServiceImpl implements ChargeService {
     }
 
 
+    /**
+     * 请求停止充电
+     *
+     * @param startChargeSeq
+     * @param connectorId
+     */
     @Override
     public void queryStopCharge(String startChargeSeq, String connectorId) {
         if (connectorId.length() == 6) {
@@ -186,14 +192,17 @@ public class ChargeServiceImpl implements ChargeService {
     }
 
 
+    /**
+     * 请求设备计费策略
+     *
+     * @param connectorId
+     * @return
+     */
     @Override
-    public void queryEquipBusinessPolicy(String connectorId) {
-        var equipBizSeq = OrderUtils.getOrderNo();
-        connectorId = "SN100523051916161";
+    public EnBusinessPolicy queryEquipBusinessPolicy(String connectorId) {
+        var equipBizSeq = OrderUtils.getOrderNo(operatorId);
         var data = enPlusService.queryEquipBusinessPolicy(equipBizSeq, connectorId);
-        var policy = data.toJavaObject(EnBusinessPolicy.class);
-        LOGGER.info("策略信息:{}",policy);
-
+        return data.toJavaObject(EnBusinessPolicy.class);
     }
 
 }

+ 10 - 1
service/src/main/java/com/kym/service/miniapp/impl/CollectServiceImpl.java

@@ -9,6 +9,7 @@ import com.kym.service.admin.StationService;
 import com.kym.service.miniapp.CollectService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -26,9 +27,17 @@ public class CollectServiceImpl extends ServiceImpl<CollectMapper, Collect> impl
     @Autowired
     private StationService stationService;
 
+    /**
+     * 添加/取消收藏
+     *
+     * @param stationId
+     * @param status
+     */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void updateCollect(String stationId, Integer status) {
-
+        var userId = StpUtil.getLoginIdAsLong();
+        lambdaUpdate().set(Collect::getStatus,status).eq(Collect::getUserId, userId).eq(Collect::getStationId, stationId).update();
     }
 
     /**

+ 2 - 3
service/src/main/java/com/kym/service/wechat/WxPayService.java

@@ -1,14 +1,13 @@
 package com.kym.service.wechat;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse;
 
-import java.math.BigDecimal;
-
 /**
  * @author skyline
  * @description
  * @date 2023-08-11 19:05
  */
 public interface WxPayService {
-    PrepayResponse prepay(BigDecimal rechargeAmount, String openid);
+    PrepayResponse prepay(JSONObject rechargeAmount);
 }

+ 11 - 3
service/src/main/java/com/kym/service/wechat/impl/WxPayServiceImpl.java

@@ -1,6 +1,10 @@
 package com.kym.service.wechat.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson2.JSONObject;
 import com.kym.common.config.WxPayConfig;
+import com.kym.common.constant.ResponseEnum;
+import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.OrderUtils;
 import com.kym.entity.miniapp.PayLog;
 import com.kym.service.miniapp.PayLogService;
@@ -26,7 +30,6 @@ import org.springframework.stereotype.Service;
 
 import java.io.BufferedReader;
 import java.io.IOException;
-import java.math.BigDecimal;
 
 /**
  * @author skyline
@@ -78,13 +81,18 @@ public class WxPayServiceImpl implements WxPayService {
      * JSAPI支付下单
      */
     @Override
-    public PrepayResponse prepay(BigDecimal rechargeAmount, String openid) {
+    public PrepayResponse prepay(JSONObject params) {
+        if (!params.containsKey("amount") || params.getInteger("amount") == null || !(params.get("amount") instanceof Integer)) {
+            throw new BusinessException(ResponseEnum.WX_PAY_AMOUNT_ERROR);
+        }
+        var rechargeAmount = params.getInteger("amount");
+        var openid = StpUtil.getSession().getString("openid");
         // 生成订单号
         String outTradeNo = OrderUtils.getOrderNo();
         // request.setXxx(val)设置所需参数,具体参数可见Request定义
         PrepayRequest request = new PrepayRequest();
         Amount amount = new Amount();
-        amount.setTotal(rechargeAmount.multiply(new BigDecimal(100)).intValue());
+        amount.setTotal(rechargeAmount * 100);
         request.setAmount(amount);
         request.setAppid(conf.getAppid());
         request.setMchid(conf.getMchid());