Explorar el Código

查询充电状态

skyline hace 2 años
padre
commit
f2911e8f1f

+ 8 - 7
common/src/main/java/com/kym/common/constant/ResponseEnum.java

@@ -30,13 +30,14 @@ public enum ResponseEnum implements BusinessExceptionAssert {
     // 订单
     EQUIP_CONNECTOR_ID_ERROR(20000, "设备编码错误"),
     ORDER_IN_PROGRESS(20001, "用户有进行中的订单"),
-    INSUFFICIENT_USER_BALANCE(20002, "用户余额不足"),
-    EN_PLUS_EQUIP_AUTH_FAIL(20003, "设备认证失败"),
-    EN_PLUS_EQUIP_NOT_CONNECTED(20004, "设备未连接"),
-    EN_PLUS_EQUIP_CHECK_FAIL(20005, "设备检测失败"),
-    EN_PLUS_EQUIP_START_FAIL(20006, "设备启动充电失败"),
-    EN_PLUS_EQUIP_NOT_EXIST(20007, "设备不存在"),
-    EN_PLUS_EQUIP_OFFLINE(20008, "设备离线"),
+    NO_ORDER_IN_PROGRESS(20002, "用户无进行中的订单"),
+    INSUFFICIENT_USER_BALANCE(20003, "用户余额不足"),
+    EN_PLUS_EQUIP_AUTH_FAIL(20004, "设备认证失败"),
+    EN_PLUS_EQUIP_NOT_CONNECTED(20005, "设备未连接"),
+    EN_PLUS_EQUIP_CHECK_FAIL(20006, "设备检测失败"),
+    EN_PLUS_EQUIP_START_FAIL(20007, "设备启动充电失败"),
+    EN_PLUS_EQUIP_NOT_EXIST(20008, "设备不存在"),
+    EN_PLUS_EQUIP_OFFLINE(20009, "设备离线"),
 
 
     // EN+

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

@@ -27,7 +27,7 @@ public enum EnPlusApi implements Api {
     EN_PLUS_QUERY_BUSINESS_POLICY(Constants.DOMAIN + "query_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_CHARGE_STATUS(Constants.DOMAIN + "query_charge_status", RequestMethod.POST), // 查询充电状态
+    EN_PLUS_QUERY_EQUIP_CHARGE_STATUS(Constants.DOMAIN + "query_equip_charge_status", RequestMethod.POST), // 查询设备充电状态
 
     //微信
     WX_MP_GET_PHONE("", RequestMethod.POST), // 获取手机号

+ 55 - 10
entity/src/main/java/com/kym/entity/miniapp/ChargeOrder.java

@@ -1,20 +1,19 @@
 package com.kym.entity.miniapp;
 
 import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Getter;
-import lombok.Setter;
-
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
 
 /**
  * <p>
- * 
+ * 充电订单表
  * </p>
  *
  * @author skyline
- * @since 2023-06-27
+ * @since 2023-08-08
  */
 @Getter
 @Setter
@@ -29,30 +28,76 @@ public class ChargeOrder implements Serializable {
 
     private Integer stationId;
 
+    /**
+     * 充电订单号(EN+)
+     */
     private String startChargeSeq;
 
+    /**
+     * 充电设备接口编码(EN+)
+     */
     private String connectorId;
 
+    /**
+     * 充电开始时间
+     */
     private LocalDateTime startTime;
 
+    /**
+     * 充电结束时间
+     */
     private LocalDateTime endTime;
 
-    private BigDecimal totalPower;
+    /**
+     * 电池剩余电量
+     */
+    private BigDecimal soc;
 
-    private BigDecimal totalCost;
+    /**
+     * 累积充电量(度)
+     */
+    private BigDecimal totalPower;
 
-    private BigDecimal elecBill;
+    /**
+     * 累积总金额(元)
+     */
+    private BigDecimal totalMoney;
 
-    private BigDecimal serviceFee;
+    /**
+     * 累积电费(元)
+     */
+    private BigDecimal elecMoney;
 
-    private Integer stopReason;
+    /**
+     * 累积服务费(元)
+     */
+    private BigDecimal serviceMoney;
 
+    /**
+     * 时段数:0~32
+     */
     private Integer sumPeriod;
 
+    /**
+     * 充电明细信息
+     */
     private String chargeDetail;
 
+    /**
+     * 订单状态:0:未知,1:成功,2:失败
+     */
+    private Integer orderStatus;
+
+    /**
+     * 充电状态:1:启动中 2:充电中 3:停止中 4:已结束 5:未知
+     */
     private Integer chargeStatus;
 
+    /**
+     * 充电停止原因:0:用户手动停止,1:运营平台停止,2:BMS停止,3:充电机器设备故障,4:连接器断开
+     */
+    private Integer stopReason;
+
     private LocalDateTime createTime;
 
     private LocalDateTime updateTime;

+ 3 - 3
mapper/src/main/java/com/kym/mapper/miniapp/ChargeOrderMapper.java

@@ -1,15 +1,15 @@
 package com.kym.mapper.miniapp;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kym.entity.miniapp.ChargeOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * <p>
- * Mapper 接口
+ * 充电订单表 Mapper 接口
  * </p>
  *
  * @author skyline
- * @since 2023-06-27
+ * @since 2023-08-08
  */
 public interface ChargeOrderMapper extends BaseMapper<ChargeOrder> {
 

+ 7 - 6
miniapp/src/main/java/com/kym/miniapp/controller/ChargerController.java

@@ -3,6 +3,7 @@ package com.kym.miniapp.controller;
 import com.alibaba.fastjson2.JSONObject;
 import com.kym.common.R;
 import com.kym.common.annotation.SysLog;
+import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.service.admin.StationService;
 import com.kym.service.enplus.EnNotifyService;
 import com.kym.service.enplus.EnPlusService;
@@ -79,9 +80,9 @@ public class ChargerController {
     }
 
     @SysLog("查询充电状态")
-    @GetMapping("/chargeStatus")
-    R chargeStatus() {
-        return R.success();
+    @GetMapping("/chargeStatus/{startChargeSeq}")
+    R<ChargeOrder> chargeStatus(@PathVariable("startChargeSeq") String startChargeSeq) {
+        return R.success(chargeService.queryEquipChargeStatus(startChargeSeq));
     }
 
 
@@ -113,9 +114,9 @@ public class ChargerController {
      * @return StartChargeSeq SuccStat 0:成功 1:失败  FailReason 0:无 1:接收失败
      */
     @PostMapping("/notification_start_charge_result")
-    JSONObject notificationStartChargeResult(@RequestBody JSONObject json) {
-        // TODO: 2023-08-03 验签 业务逻辑
-        return null;
+    @ResponseBody
+    String notificationStartChargeResult(@RequestBody JSONObject json) {
+        return enNotifyService.handleNotificationStartChargeResult(json);
     }
 
 

+ 2 - 2
miniapp/src/main/java/com/kym/miniapp/utils/MybatisPlusGeneratorForMiniApp.java

@@ -48,8 +48,8 @@ public class MybatisPlusGeneratorForMiniApp {
                     // 设置需要生成的表名
                     builder.addInclude(
 //                                    "t_user",
-                                    "t_account"
-//                                    "t_charge_order",
+//                                    "t_account"
+                                    "t_charge_order"
 //                                    "t_wallet_detail",
 //                                    "t_cars",
 //                            "t_collect"

+ 33 - 0
miniapp/src/main/resources/mappers/ChargeOrderMapper.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kym.mapper.miniapp.ChargeOrderMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.kym.entity.miniapp.ChargeOrder">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="station_id" property="stationId" />
+        <result column="start_charge_seq" property="startChargeSeq" />
+        <result column="connector_id" property="connectorId" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="soc" property="soc" />
+        <result column="total_power" property="totalPower" />
+        <result column="total_money" property="totalMoney" />
+        <result column="elec_money" property="elecMoney" />
+        <result column="service_money" property="serviceMoney" />
+        <result column="sum_period" property="sumPeriod" />
+        <result column="charge_detail" property="chargeDetail" />
+        <result column="order_status" property="orderStatus" />
+        <result column="charge_status" property="chargeStatus" />
+        <result column="stop_reason" property="stopReason" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, user_id, station_id, start_charge_seq, connector_id, start_time, end_time, soc, total_power, total_money, elec_money, service_money, sum_period, charge_detail, order_status, charge_status, stop_reason, create_time, update_time
+    </sql>
+
+</mapper>

+ 0 - 1
service/src/main/java/com/kym/service/admin/EquipmentInfoService.java

@@ -17,5 +17,4 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @since 2023-08-05
  */
 public interface EquipmentInfoService extends IService<EquipmentInfo> {
-    JSONObject queryEquipAuth(String connectorId, String equipAuthSeq);
 }

+ 0 - 14
service/src/main/java/com/kym/service/admin/impl/EquipmentInfoServiceImpl.java

@@ -21,20 +21,6 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class EquipmentInfoServiceImpl extends ServiceImpl<EquipmentInfoMapper, EquipmentInfo> implements EquipmentInfoService {
-    @Autowired
-    private EnPlusService enPlusService;
 
-    @Override
-    public JSONObject queryEquipAuth(String connectorId, String equipAuthSeq) {
-        var param = """
-                {
-                    "EquipAuthSeq":%s,
-                    "ConnectorID":%s
-                }
-                """.formatted(equipAuthSeq, connectorId);
-        var response = enPlusService.enPlusPost(EnPlusApi.EN_PLUS_QUERY_EQUIP_AUTH.getApi(), enPlusService.buildParams(param));
-
-        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
-    }
 
 }

+ 3 - 0
service/src/main/java/com/kym/service/enplus/EnNotifyService.java

@@ -1,5 +1,7 @@
 package com.kym.service.enplus;
 
+import com.alibaba.fastjson2.JSONObject;
+
 /**
  * @author skyline
  * @description
@@ -8,4 +10,5 @@ package com.kym.service.enplus;
 public interface EnNotifyService {
 
 
+    String handleNotificationStartChargeResult(JSONObject json);
 }

+ 4 - 0
service/src/main/java/com/kym/service/enplus/EnPlusService.java

@@ -17,4 +17,8 @@ public interface EnPlusService {
 
 
     String signValidation(JSONObject json);
+
+    JSONObject queryEquipAuth(String connectorId, String equipAuthSeq);
+
+    JSONObject queryEquipChargeStatus(String startChargeSeq);
 }

+ 31 - 3
service/src/main/java/com/kym/service/enplus/impl/EnNotifyServiceImpl.java

@@ -1,11 +1,17 @@
 package com.kym.service.enplus.impl;
 
 import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.service.enplus.EnNotifyService;
 import com.kym.service.enplus.EnPlusService;
+import com.kym.service.miniapp.ChargeOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
 /**
  * @author skyline
  * @description
@@ -18,6 +24,9 @@ public class EnNotifyServiceImpl implements EnNotifyService {
     @Autowired
     private EnPlusService enPlusService;
 
+    @Autowired
+    private ChargeOrderService chargeOrderService;
+
     /**
      * EN+ 设备状态变化推送
      *
@@ -37,10 +46,29 @@ public class EnNotifyServiceImpl implements EnNotifyService {
      * @param json
      * @return
      */
-    String handleNotificationStartChargeResult(JSONObject json) {
+    @Override
+    public String handleNotificationStartChargeResult(JSONObject json) {
         var data = enPlusService.signValidation(json);
-        // TODO 业务逻辑处理
-        return null;
+        var obj = JSONObject.parseObject(data);
+        var startChargeSeq = obj.getString("StartChargeSeq");
+        var StartChargeSeqStat = obj.getIntValue("StartChargeSeqStat");
+        var connectorId = obj.getString("connectorId");
+        var startTime = obj.getString("StartTime");
+
+        // 更新订单状态
+        UpdateWrapper<ChargeOrder> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.eq("connector_id", connectorId);
+        updateWrapper.eq("start_charge_seq", startChargeSeq);
+        updateWrapper.set("charge_status", StartChargeSeqStat);
+        updateWrapper.set("start_time", LocalDateTime.parse(startTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        chargeOrderService.update(updateWrapper);
+        return """
+                {
+                    "StartChargeSeq":%s,
+                    "SuccStat":%d,
+                    "FailReason":%d
+                }
+                """.formatted(startChargeSeq, 0, 0);
     }
 
     /**

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

@@ -193,19 +193,21 @@ public class EnPlusServiceImpl implements EnPlusService {
     /**
      * 请求设备认证
      *
+     * @param connectorId  充电设备接口编码
      * @param equipAuthSeq 格式:运营商ID+唯一编码 27字符
-     * @param connectorID  充电设备接口编码
      * @return
      */
-    String queryEquipAuth(String equipAuthSeq, String connectorID) {
+    @Override
+    public JSONObject queryEquipAuth(String connectorId, String equipAuthSeq) {
         var param = """
                 {
                     "EquipAuthSeq":%s,
                     "ConnectorID":%s
                 }
-                """.formatted(equipAuthSeq, connectorID);
-        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_STATS.getApi(), buildParams(param));
-        return AESUtil.decrypt(response.getData());
+                """.formatted(equipAuthSeq, connectorId);
+        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_EQUIP_AUTH.getApi(), buildParams(param));
+
+        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
 
@@ -216,7 +218,7 @@ public class EnPlusServiceImpl implements EnPlusService {
      * @param connectorID 充电设备接口编码
      * @return
      */
-    String queryEquipBusinessPolicy(String equipBizSeq, String connectorID) {
+    JSONObject queryEquipBusinessPolicy(String equipBizSeq, String connectorID) {
         var param = """
                 {
                     "EquipBizSeq":%s,
@@ -224,10 +226,9 @@ public class EnPlusServiceImpl implements EnPlusService {
                 }
                 """.formatted(equipBizSeq, connectorID);
         var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_STATS.getApi(), buildParams(param));
-        return AESUtil.decrypt(response.getData());
+        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
-
     /**
      * 请求启动充电
      *
@@ -236,7 +237,7 @@ public class EnPlusServiceImpl implements EnPlusService {
      * @param qrCode
      * @return
      */
-    String queryStartCharge(String startChargeSeq, String connectorID, String qrCode) {
+    JSONObject queryStartCharge(String startChargeSeq, String connectorID, String qrCode) {
         var param = """
                 {
                     "StartChargeSeq":%s,
@@ -245,43 +246,44 @@ public class EnPlusServiceImpl implements EnPlusService {
                 }
                 """.formatted(startChargeSeq, connectorID, qrCode);
         var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_START_CHARGE.getApi(), buildParams(param));
-        return AESUtil.decrypt(response.getData());
+        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
     /**
-     * 请求停止充电
+     * 查询充电状态
      *
      * @param startChargeSeq
-     * @param connectorID
      * @return
      */
-    String queryStopCharge(String startChargeSeq, String connectorID) {
+    @Override
+    public JSONObject queryEquipChargeStatus(String startChargeSeq) {
         var param = """
                 {
-                    "StartChargeSeq":%s,
-                    "ConnectorID":%s
+                    "StartChargeSeq":%s
                 }
-                """.formatted(startChargeSeq, connectorID);
-        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STOP_CHARGE.getApi(), buildParams(param));
-        return AESUtil.decrypt(response.getData());
+                """.formatted(startChargeSeq);
+        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_EQUIP_CHARGE_STATUS.getApi(), buildParams(param));
+        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
-
     /**
-     * 查询充电状态
+     * 请求停止充电
      *
      * @param startChargeSeq
+     * @param connectorID
      * @return
      */
-    String queryEquipChargeStatus(String startChargeSeq) {
+    JSONObject queryStopCharge(String startChargeSeq, String connectorID) {
         var param = """
                 {
-                    "StartChargeSeq":%s
+                    "StartChargeSeq":%s,
+                    "ConnectorID":%s
                 }
-                """.formatted(startChargeSeq);
-        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_CHARGE_STATUS.getApi(), buildParams(param));
-        return AESUtil.decrypt(response.getData());
+                """.formatted(startChargeSeq, connectorID);
+        var response = enPlusPost(EnPlusApi.EN_PLUS_QUERY_STOP_CHARGE.getApi(), buildParams(param));
+        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
 
+
 }

+ 3 - 3
service/src/main/java/com/kym/service/miniapp/ChargeOrderService.java

@@ -1,15 +1,15 @@
 package com.kym.service.miniapp;
 
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.kym.entity.miniapp.ChargeOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
  * <p>
- *  服务类
+ * 充电订单表 服务类
  * </p>
  *
  * @author skyline
- * @since 2023-06-27
+ * @since 2023-08-08
  */
 public interface ChargeOrderService extends IService<ChargeOrder> {
 

+ 4 - 0
service/src/main/java/com/kym/service/miniapp/ChargeService.java

@@ -1,5 +1,7 @@
 package com.kym.service.miniapp;
 
+import com.kym.entity.miniapp.ChargeOrder;
+
 /**
  * @author skyline
  * @description
@@ -7,4 +9,6 @@ package com.kym.service.miniapp;
  */
 public interface ChargeService {
     String startCharge(String connectorId);
+
+    ChargeOrder queryEquipChargeStatus(String startChargeSeq);
 }

+ 4 - 4
service/src/main/java/com/kym/service/miniapp/impl/ChargeOrderServiceImpl.java

@@ -1,24 +1,24 @@
 package com.kym.service.miniapp.impl;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kym.entity.miniapp.ChargeOrder;
 import com.kym.mapper.miniapp.ChargeOrderMapper;
 import com.kym.service.miniapp.ChargeOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
  * <p>
- *  服务实现类
+ * 充电订单表 服务实现类
  * </p>
  *
  * @author skyline
- * @since 2023-06-27
+ * @since 2023-08-08
  */
 @Service
 public class ChargeOrderServiceImpl extends ServiceImpl<ChargeOrderMapper, ChargeOrder> implements ChargeOrderService {
-
     @Override
     public ChargeOrder getChargingOrderByUserId(Long userId) {
         return getOne(lambdaQuery().eq(ChargeOrder::getUserId,userId).eq(ChargeOrder::getChargeStatus,2));
     }
+
 }

+ 35 - 1
service/src/main/java/com/kym/service/miniapp/impl/ChargeServiceImpl.java

@@ -55,6 +55,7 @@ public class ChargeServiceImpl implements ChargeService {
 
     /**
      * 启动充电
+     *
      * @param connectorId
      * @return
      */
@@ -90,7 +91,7 @@ public class ChargeServiceImpl implements ChargeService {
             String startChargeSeq = operatorId.substring(0, 8).concat(String.valueOf(idGenerator.nextId()));
 
             // 请求设备认证
-            var equipAuth = equipmentInfoService.queryEquipAuth(connectorId, startChargeSeq);
+            var equipAuth = enPlusService.queryEquipAuth(connectorId, startChargeSeq);
 
             if (equipAuth.containsKey("SuccStat") && equipAuth.getIntValue("SuccStat") == 0) {
                 // TODO 查询业务策略信息(计费信息),目前计费在EN+完成,后续自主计费需要开发
@@ -159,4 +160,37 @@ public class ChargeServiceImpl implements ChargeService {
         return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
     }
 
+
+    /**
+     * 请求EN+设备充电状态
+     *
+     * @param startChargeSeq
+     * @return
+     */
+    @Override
+    public ChargeOrder queryEquipChargeStatus(String startChargeSeq) {
+        var userId = StpUtil.getSession().getLong("userId");
+        var chargeOrder = chargeOrderService.getChargingOrderByUserId(userId);
+        if (chargeOrder != null) {
+            // 查询充电
+            var data = enPlusService.queryEquipChargeStatus(startChargeSeq);
+
+            // 更新订单信息
+            chargeOrder.setSoc(data.getBigDecimal("soc"));
+            chargeOrder.setTotalPower(data.getBigDecimal("TotalPower"));
+            chargeOrder.setTotalMoney(data.getBigDecimal("TotalMoney"));
+            chargeOrder.setElecMoney(data.getBigDecimal("ElecMoney"));
+            chargeOrder.setServiceMoney(data.getBigDecimal("SeviceMoney")); // 这里文档service单词错误,按文档填写
+            chargeOrder.setSumPeriod(data.getIntValue("SumPeriod"));
+            chargeOrder.setChargeDetail(data.getString("ChargeDetails"));
+            chargeOrder.setChargeStatus(data.getIntValue("StartChargeSeqStat"));
+            chargeOrderService.updateById(chargeOrder);
+            return chargeOrder;
+        } else {
+            LOGGER.error("用户:{}无进行中的订单", userId);
+            throw new BusinessException(ResponseEnum.NO_ORDER_IN_PROGRESS);
+        }
+    }
+
+
 }