skyline 2 年之前
父節點
當前提交
db8f6084b6

+ 2 - 2
admin/src/main/java/com/kym/admin/config/SaTokenConfigure.java

@@ -20,8 +20,8 @@ public class SaTokenConfigure implements WebMvcConfigurer {
         registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
                 .addPathPatterns("/**")
                 // login接口不鉴权
-                .excludePathPatterns("/admin-user/login", "/station/pullEnStations");
+                .excludePathPatterns("/admin-user/login");
+        // TODO: 2023-07-11 具体功能权限校验后续开发
     }
-    // TODO: 2023-07-11 具体功能权限校验后续开发
 
 }

+ 31 - 0
admin/src/main/java/com/kym/admin/controller/CustomUserController.java

@@ -0,0 +1,31 @@
+package com.kym.admin.controller;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.kym.common.R;
+import com.kym.service.admin.AdminUserService;
+import com.kym.service.miniapp.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 客户用户表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-08-18
+ */
+@RestController
+@RequestMapping("/custom-user")
+public class CustomUserController {
+
+    @Autowired
+    private UserService customUserService;
+
+    // TODO: 2023-08-18 用户信息列表(基本信息,余额)
+    
+
+}

+ 6 - 24
common/src/main/java/com/kym/common/utils/AESUtil.java

@@ -31,17 +31,10 @@ public class AESUtil {
     private static final String AES = "AES";
 
 
-    private static String operatorId;
-    private static String operatorSecret;
-    private static String dataSecret;
-    private static String dataSecretIV;
-    private static String sigSecret;
-
-    final
-    EnPlusConfig config;
+    static EnPlusConfig config;
 
     public AESUtil(EnPlusConfig config) {
-        this.config = config;
+        AESUtil.config = config;
     }
 
     /**
@@ -67,12 +60,12 @@ public class AESUtil {
             Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
 
             //偏移量
-            IvParameterSpec zeroIv = new IvParameterSpec(dataSecretIV.getBytes(CODE_TYPE));
+            IvParameterSpec zeroIv = new IvParameterSpec(config.getDataSecretIv().getBytes(CODE_TYPE));
 
             byte[] byteContent = content.getBytes(CODE_TYPE);
 
             //使用加密秘钥
-            SecretKeySpec skeySpec = new SecretKeySpec(dataSecret.getBytes(CODE_TYPE), AES);
+            SecretKeySpec skeySpec = new SecretKeySpec(config.getDataSecret().getBytes(CODE_TYPE), AES);
             //SecretKeySpec skeySpec = getSecretKey(key);
 
             cipher.init(Cipher.ENCRYPT_MODE, skeySpec, zeroIv);// 初始化为加密模式的密码器
@@ -102,9 +95,9 @@ public class AESUtil {
         try {
             //实例化
             Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
-            IvParameterSpec zeroIv = new IvParameterSpec(dataSecretIV.getBytes(CODE_TYPE));
+            IvParameterSpec zeroIv = new IvParameterSpec(config.getDataSecretIv().getBytes(CODE_TYPE));
 
-            SecretKeySpec skeySpec = new SecretKeySpec(dataSecret.getBytes(CODE_TYPE), AES);
+            SecretKeySpec skeySpec = new SecretKeySpec(config.getDataSecret().getBytes(CODE_TYPE), AES);
             //SecretKeySpec skeySpec = getSecretKey(key);
             cipher.init(Cipher.DECRYPT_MODE, skeySpec, zeroIv);
 
@@ -139,15 +132,4 @@ public class AESUtil {
         }
         return null;
     }
-
-    @PostConstruct//初始化调用
-    public void init() {
-        operatorId = config.getOperatorId();
-        operatorSecret = config.getOperatorSecret();
-        dataSecret = config.getDataSecret();
-        dataSecretIV = config.getDataSecretIv();
-        sigSecret = config.getSigSecret();
-    }
-
-
 }

+ 2 - 2
miniapp/src/main/resources/application-prod.yml

@@ -11,6 +11,6 @@ en-plus:
   # 签名密钥
   sigSecret: 2365b20f69e44817
   # 最小充电余额(分)
-  charge-min-amount: 200
+  chargeMinAmount: 200
   # 接口地址
-  api-domain: https://api.en-plus.cn:8080/Charge/evcs/v1//MA5HJNDG1/
+  apiDomain: https://api.en-plus.cn:8080/Charge/evcs/v1//MA5HJNDG1/

+ 9 - 6
service/src/main/java/com/kym/service/admin/impl/AdminUserServiceImpl.java

@@ -1,8 +1,9 @@
 package com.kym.service.admin.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.crypto.digest.DigestAlgorithm;
+import cn.hutool.crypto.digest.Digester;
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kym.common.R;
 import com.kym.common.constant.ResponseEnum;
@@ -28,20 +29,22 @@ import java.util.Map;
 @Service
 @DS("db-admin")
 public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser> implements AdminUserService {
+    final static Digester MD5 = new Digester(DigestAlgorithm.MD5);
     private static final Logger LOGGER = LoggerFactory.getLogger(AdminUserServiceImpl.class);
 
     @Override
-    public R login(String username, String password) {
-        var user = this.getOne(new QueryWrapper<AdminUser>().eq("username", username));
-        if (password.equals(user.getPassword())) {
+    public R login(String mobilePhone, String password) {
+        var user = lambdaQuery().eq(AdminUser::getMobilePhone, mobilePhone).one();
+        var pwd = MD5.digestHex(password.concat(MD5.digestHex(mobilePhone).substring(0, 5)));
+        if (pwd.equals(user.getPassword())) {
             StpUtil.login(user.getId());
             // 用户名存入session,统一日志读取使用
             StpUtil.getSession().set("userId", user.getId());
             StpUtil.getSession().set("companyId", user.getCompanyId());
-            StpUtil.getSession().set("username", user.getUsername());
+            StpUtil.getSession().set("mobilePhone", user.getMobilePhone());
             user.setLastLoginTime(LocalDateTime.now());
             this.updateById(user);
-            LOGGER.info("用户:" + username + "/id:" + user.getId() + "登录");
+            LOGGER.info("用户:" + mobilePhone + "/id:" + user.getId() + "登录");
             // token在cookie中有隐式返回,这里多做显式返回
             return R.success(Map.of("id", user.getId(), "satoken", StpUtil.getTokenValue()));
         }

+ 7 - 5
service/src/main/java/com/kym/service/admin/impl/StationServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kym.common.enums.EnPlusApi;
 import com.kym.common.utils.AESUtil;
 import com.kym.entity.admin.Station;
+import com.kym.entity.enplus.EnStationStatsInfo;
 import com.kym.entity.enplus.EnStationStatusInfo;
 import com.kym.mapper.admin.StationMapper;
 import com.kym.service.admin.StationService;
@@ -73,17 +74,18 @@ public class StationServiceImpl extends ServiceImpl<StationMapper, Station> impl
      * @return
      */
     @Override
-    public JSONObject stationStats(String stationId, String startTime, String endTime) {
+    public EnStationStatsInfo stationStats(String stationId, String startTime, String endTime) {
         var param = """
                 {
-                    "StationID":%s,
-                    "StartTime":%s,
-                    "EndTime":%s
+                    "StationID":"%s",
+                    "StartTime":"%s",
+                    "EndTime":"%s"
                 }
                 """.formatted(stationId, startTime, endTime);
         var response = enPlusService.enPlusPost(EnPlusApi.EN_PLUS_QUERY_STATION_STATS.getApi(), enPlusService.buildParams(param));
         // TODO: 2023-08-12 包装成自己的数据格式
-        return JSONObject.parseObject(AESUtil.decrypt(response.getData()));
+        var enStationStats =  JSONObject.parseObject(AESUtil.decrypt(response.getData()));
+        return enStationStats.getJSONObject("StationStats").toJavaObject(EnStationStatsInfo.class);
     }
 
 

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

@@ -2,6 +2,7 @@ package com.kym.service.miniapp.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
+import com.kym.common.config.EnPlusConfig;
 import com.kym.common.constant.ResponseEnum;
 import com.kym.common.exception.BusinessException;
 import com.kym.common.utils.OrderUtils;
@@ -15,7 +16,6 @@ import com.kym.service.miniapp.ChargeService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Map;
@@ -42,8 +42,8 @@ public class ChargeServiceImpl implements ChargeService {
     @Autowired
     private EnPlusService enPlusService;
 
-    @Value("${en-plus.operatorId}")
-    private String operatorId;
+    @Autowired
+    private EnPlusConfig enPlusConfig;
 
     /**
      * 启动充电
@@ -74,7 +74,7 @@ public class ChargeServiceImpl implements ChargeService {
         var amount = account.getBalance() - 50;
 
         // 充电订单号/设备认证号
-        String startChargeSeq = OrderUtils.getOrderNo(operatorId);
+        String startChargeSeq = OrderUtils.getOrderNo(enPlusConfig.getOperatorId());
 
         // 请求设备认证
         var equipAuth = enPlusService.queryEquipAuth(connectorId, startChargeSeq);
@@ -126,7 +126,7 @@ public class ChargeServiceImpl implements ChargeService {
      */
     @Override
     public ChargeOrder queryEquipChargeStatus(String startChargeSeq) {
-        var userId = StpUtil.getSession().getLong("userId");
+        var userId = StpUtil.getLoginIdAsLong();
         var chargeOrder = chargeOrderService.getChargingOrderByUserId(userId);
         if (chargeOrder != null) {
             // 查询充电
@@ -205,7 +205,7 @@ public class ChargeServiceImpl implements ChargeService {
      */
     @Override
     public EnBusinessPolicy queryEquipBusinessPolicy(String connectorId) {
-        var equipBizSeq = OrderUtils.getOrderNo(operatorId);
+        var equipBizSeq = OrderUtils.getOrderNo(enPlusConfig.getOperatorId());
         var data = enPlusService.queryEquipBusinessPolicy(equipBizSeq, connectorId);
         return data.toJavaObject(EnBusinessPolicy.class);
     }